在Object中查找Array的键的匹配项,然后将该键的值指定为此Object的新属性

时间:2018-01-21 10:55:39

标签: javascript arrays object

我有一个对象数组:

reviewers = [
              {
               id: ''
              },
              {},
              {}
            ]

这些对象中的每一个都是同质的(除了'id'之外还有其他几个键)。 我也有一个Object,具有以下结构:

reviewerCounters = {
                     12345678: 3,
                     12312312: 2,
                     14234234: 0
                   }

我的想法是,在第二个对象中,我有属性'id'的值(id - value)对象的长度始终与审阅者数组的长度相同。

我需要一个函数,它接受第二个对象上每个ID的值,并在第一个数组的每个对象中的新属性“Counter”中输出该值,其ID与所取值的ID相匹配。

因此,输出将是:

reviewers = [
              {
               id: '12345678',
               counter: '3'
              },
              {},
              {}
            ]

实现这一目标的最佳方式是什么?

2 个答案:

答案 0 :(得分:1)

您可以使用数组的单个循环并检查id是否存在in计数器对象。如果存在,则分配值。

var reviewers = [{ id: '12345678' }, {}, {}],
    reviewerCounters = { 12345678: 3, 12312312: 2, 14234234: 0 };
    
reviewers.forEach(function (o) {
    if (o.id in reviewerCounters) {
        o.counter = reviewerCounters[o.id];
    }
});

console.log(reviewers);

答案 1 :(得分:0)

迭代一个对象非常棘手,将它与一个嵌套迭代结合在一个数组上,这样的东西可能对你有用:

function addCounter(obj, arrayData)
{
  var keys = Object.keys(obj);
  for(var i = 0; i < keys.length; i++)
  {
     var id = obj[keys[i]];
     for(var w = 0; w < arrayData.length; w++)
     {
        if(arrayDaya[w]['id'] == id)
        {
           arrayData[w]['counter'] = obj[keys[i]];
        }
     }

    return arrayData;
  }
}