js 数组问题

有一个数组,长度为7,数组元素只有0和1两种选择,例如[0,1,1,1,1,1,0]这样的,第一位表示周日,第二位表示周一,...最后一位表示周六,现在怎样高效的做出判断,得到以下的结果:
1.若只有第一个元素和最后一个元素是1时,返回“周末”
2.若只有中间五位都为1时,返回“工作日”

阅读 2.9k
5 个回答

想到一个很普通且简单的办法:
(不知道高不高效 -_-||)

var a =  [0,1,1,1,1,1,0];
var b = a.join("");
if(b ==  "0111110"){
  console.log(“工作日”);
}else if(b ==  "1000001"){
  console.log(“周末”);
}else {
  //do nothing
}

抛砖引玉

建议使用二进制位存储实现。假设用变量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('没有想到')

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题