如何处理这个数组?

let arr = [1,0,0,0];

我的问题是arr里面的每项分别是每个按钮的状态,我点击某项反转其状态,且其他置为0。

如何比较好的实现?

阅读 3.2k
9 个回答

点击某按钮之后,拿到对应数组中的index,然后map一下

let clickIndex //点击的index
let fn = val => val === 0 ? 1 : 0
newArr = arr.map( (val, index) => index === clickIndex ? fn(val) : 0 ) //index相等反转,否则为0
let arr = [1, 0, 0, 0];
function reversal(data, index) {
    data[index] = !data[index] ? 1 : 0;
    for (let i = 0; i < data.length; i++) {
        if (i === index)
            break;
        data[i] = 0;
    }
}
reversal(arr, 2);
console.log(arr);

回想一下曾经学过的二进制取反:

    1 - 1 = 0
    1 - 0 = 1

发现了什么吗? 某位数取反等于 1 减这个数本身。

再看这个问题,是不是有了一个新思路:

let arr = [1,0,0,0];

const af = ('1111' - arr.join('')).toString().padStart(4,0).split('');  // ['0','1','1','1']

这样做避免了循环遍历,但是唯一的缺点在于结果数组的元素是字符串类型,当然这其实也不会影响你做 Boolean 判断。

有且仅有一个激活的key,那你直接存一个key不就好了么,存一个数组是为了什么。

只能循环判断了把

arr[i] = !arr[i]?1:0

用数组存储状态,需要遍历比较麻烦,建议你用对象,操作比较方便

var arr = [1, 0, 0, 0]
var index = 2

var check = arr[index]

for (var i in arr) arr[i] = 0

arr[index] = 1 - check
新手上路,请多包涵

对象处理较好一点

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