Lodash:循环遍历对象数组并与键/值进行比较

时间:2017-06-28 18:23:50

标签: lodash

我循环遍历一个对象数组并检查每个对象中的id是否包含在键/值对的对象中。如果id包含在键值对中,那么我将该值指定为新的对象属性。

所以,让我说我有一系列对象:

var arrayOfObjects = [
  {
    id: 1,
    name: "bob"
  },
 {
    id: 2,
    name: "sue"
  }
];

我还有一个键值对的对象:

var keyValuePairs = { 1: "admin", 2: "user" }

我想遍历我的arrayOfObjects,看看id是否在我的keyValuePairs中。如果是这样,我想在我的arrayOfObjects中添加一个新属性,使它看起来像这样:

var arrayOfObjects = [
  {
    id: 1,
    name: "bob",
    title: "admin"
  },
 {
    id: 2,
    name: "sue",
    title: "user"
  }
];

我已经尝试了这个,但它没有添加'标题'我的arrayOfObjects的属性。关于如何使用lodash做到这一点的任何想法?

return _.map(arrayOfObjects, function(obj) {
   if(obj.id in keyValuePairs)
   {
     obj.title = keyValuePairs[obj.id]; 
   }
   return obj;
 });

1 个答案:

答案 0 :(得分:0)

通过使用Array#map迭代数组,您可以轻松地使用lodash或使用lodash等效,并且如果keyValuePairs中存在值,则将对象和标题分配给新对象:

var arrayOfObjects = [{"id":1,"name":"bob"},{"id":2,"name":"sue"},{"id":3,"name":"dave"}];

var keyValuePairs = { 1: "admin", 2: "user" }

var result = arrayOfObjects.map(function(o) {
  return keyValuePairs[o.id] ? Object.assign({}, o, { title: keyValuePairs[o.id] }) : o;
});

console.log(result);

相关问题