如何在不循环的情况下更新数组内的JS对象值?

zsu*_*ary 5 javascript node.js ecmascript-6

我知道已经回答了一个类似的问题,但我的问题有所不同,我只是不想找到它,我只是想更新它

我有一个像这样的 JS 对象数组:

let data = [
  {
    contact_id: 15,
    use_id: 16,
    name: 'ABC',
    phoneNo: '0092123456789',
    checked: false,
  },
  {
    contact_id: 16,
    use_id: 22,
    name: 'DEF',
    phoneNo: '0092123456788',
    checked: false,
  },
  {
    contact_id: 17,
    use_id: 24,
    name: 'XYZ',
    phoneNo: '0092123456787',
    checked: false,
  }
];
Run Code Online (Sandbox Code Playgroud)

现在考虑到这一点,我有一个名为phoneNo保证唯一值的属性。

checked现在我想要的是切换给定数字的值。

我尝试过的:

for (let i = 0; i < data.length; i++) {
    if (data[i]['phoneNo'] === item.phoneNo) {
        data[i]['checked'] = !data[i]['checked'];
        break; // to make it a little efficent :-)
    }
}
Run Code Online (Sandbox Code Playgroud)

我编写了这段代码,它工作了一段时间,但现在我意识到列表变得越来越大,并且这段代码一遍又一遍地迭代,这是非常低效的。

我想要的是?

有没有一种方法可以直接切换checked给定值的属性值phoneNo,而无需循环遍历每个项目?

小智 1

不,您必须知道数组中要更改的元素的索引,或者循环遍历所有项目以找到与您要查找的内容相匹配的元素。