我知道已经回答了similar question ,但是我的不同之处在于我只是不想找到它,我只想更新它

我有这样的对象的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,
  }
];

现在考虑到这一点,我有一个名为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 :-)
    }
}

我编写了这段代码,并且在一段时间内运行良好,但是现在我意识到列表越来越大,并且此代码反复迭代,这效率很低。

我想要什么?

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

最佳答案

另一种选择是更改数据存储方式。如果phoneNo是唯一的,则可以使用电话号码作为密钥来进行数据处理。

let data2={
  '0092123456789':{
    contact_id: 15,
    use_id: 16,
    name: 'ABC',
    checked: false,
  },
  '0092123456788':{
    contact_id: 16,
    use_id: 22,
    name: 'DEF',
    checked: false,
  },
  '0092123456787':{
    contact_id: 17,
    use_id: 24,
    name: 'XYZ',
    checked: false,
  }};
myPhoneNo = '0092123456787';
data2[myPhoneNo].checked = true;
console.log(data2);

07-28 09:57