【问题标题】:how to write a loop for search array如何为搜索数组编写循环
【发布时间】:2018-04-07 12:23:18
【问题描述】:

我想学习如何使这段代码更简洁。我正在使用 JavaScript。

这是一个对象数组:

var arr = [
    { key: 'qqqqq', value: '11' },
    { key: 'aaaaa', value: '121' },
    { key: 'bbbbb', value: '131' },
    { key: 'ccccc', value: '141' },
]

var obj = { key: 'cccc', value: '-fd-' };

我的目标是在arr中查找obj(意思是,arritem.key == obj.key),如果是,更新值,否则将obj附加到arr。

直接a的思路是:

let has = false;
for(const item of arr) {
    if(item.key == obj.key) {
        item.value = obj.value;
        has = true;
        break;
    }
}

if(!has) {
    arr.push(l);
}

有没有更干净的方法来实现?

【问题讨论】:

  • 密钥是否唯一?

标签: javascript jquery html arrays


【解决方案1】:

除非您被限制使用给定的数组格式,否则您可以通过将其转换为对象或键/值对来实现您想要的...

var data = {
    'qqqqq': '11',
    'aaaaa': '121',
    'bbbbb': '131',
    'ccccc': '141'
}

然后添加或更新一个值...

data['ccccc'] = '-fd-';  // updates ccccc
data['eeeee'] = 'new';   // adds eeeee

【讨论】:

    【解决方案2】:

    您可以使用Array#find 来获取对象,或者如果没有找到将obj 推送到数组。

    var arr = [{ key: 'qqqqq', value: '11' }, { key: 'aaaaa', value: '121' }, { key: 'bbbbb', value: '131' }, { key: 'ccccc', value: '141' }],
        obj = { key: 'cccc', value: '-fd-' };
        temp = arr.find(o => o.key === obj.key);
    
    if (temp) {
        temp.value = obj.value;
    } else {
        arr.push(obj);
    }
    
    console.log(arr);
    .as-console-wrapper { max-height: 100% !important; top: 0; }

    【讨论】:

      【解决方案3】:

      您必须首先搜索数组中是否存在项目,您可以使用findIndex => 如果找到项目只需将找到的索引处的值替换为新的object 否则push 将其放入您的数组中.

      var arr = [
          { key: 'qqqqq', value: '11' },
          { key: 'aaaaa', value: '121' },
          { key: 'bbbbb', value: '131' },
          { key: 'ccccc', value: '141' },
      ]
      
      var obj = { key: 'cccc', value: '-fd-' };
      var obj2 = { key: 'aaaaa', value: 'newValue' };
      
      function updateOrPush(arr,obj){
        var id = arr.findIndex(e => e.key == obj.key);
        if(id > -1){
          arr[id] = obj;
        }
        else{
          arr.push(obj);
        }
      }
      
      updateOrPush(arr,obj);
      updateOrPush(arr,obj2);
      console.log(arr)
       

      【讨论】:

        【解决方案4】:

        希望这段代码更简单

        var arr = [
            { key: 'qqqqq', value: '11' },
            { key: 'aaaaa', value: '121' },
            { key: 'bbbbb', value: '131' },
            { key: 'ccccc', value: '141' },
        ]
        
        var obj = { key: 'cccc', value: '-fd-' };
        
        var objIndex = arr.findIndex(ele => ele.key === obj.key);
        
        objIndex < 0 ? arr.push(obj) : arr[objIndex].value = obj.value;
         
        console.log(arr);

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-08-28
          • 1970-01-01
          • 1970-01-01
          • 2011-12-03
          • 1970-01-01
          • 2012-01-25
          • 1970-01-01
          • 2013-07-24
          相关资源
          最近更新 更多