有一个数组,长度为7,数组元素只有0和1两种选择,例如[0,1,1,1,1,1,0]这样的,第一位表示周日,第二位表示周一,...最后一位表示周六,现在怎样高效的做出判断,得到以下的结果:
1.若只有第一个元素和最后一个元素是1时,返回“周末”
2.若只有中间五位都为1时,返回“工作日”
有一个数组,长度为7,数组元素只有0和1两种选择,例如[0,1,1,1,1,1,0]这样的,第一位表示周日,第二位表示周一,...最后一位表示周六,现在怎样高效的做出判断,得到以下的结果:
1.若只有第一个元素和最后一个元素是1时,返回“周末”
2.若只有中间五位都为1时,返回“工作日”
建议使用二进制位存储实现。假设用变量var1([0,1,1,1,1,1,0])用来判断:
数组先转化为数字:var2 = parseInt(var1.join(''), 2)
1.b1000001(十进制65)表示周末,var2 === 65
则为true
2.b0111110(十进制62)表示工作日,var2 === 62
则为true
想了下还是直接查字典比较简单,也省去了if...else...
,数组当键值会隐式执行toString
所以没问题。想不到更高效率的了。
function checkDays(days) {
var map = {
"0,1,1,1,1,1,0": "工作日",
"1,0,0,0,0,0,1": "周末"
}
return map[days] || "其他";
}
var d1 = [0, 1, 1, 1, 1, 1, 0];
var d2 = [1, 1, 1, 1, 1, 1, 1];
var d3 = [1, 0, 0, 0, 0, 0, 1];
console.log(checkDays(d1)); // 工作日
console.log(checkDays(d2)); // 其他
console.log(checkDays(d3)); // 周末
var days = [1,1,1,1,1,1,0];
days.unshift(days.pop());
if (days.slice(0,2).join(',')==='1,1')
console.log('周末')
else if (days.slice(2).join(',')==='1,1,1,1,1')
console.log('工作日')
else console.log('没有想到')
10 回答11.2k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
想到一个很普通且简单的办法:
(不知道高不高效 -_-||)
抛砖引玉