如果满足某些条件,则在对象上循环并为对象数组分配值-Vanilla JavaScript

时间:2018-10-29 22:06:21

标签: javascript arrays object lodash

说我有一个像这样的对象(这里可能有很多物品);

myObject:{
 item1: {
  visible: true;
 },
 item2: {
  visible: true;
 },
 item3: {
  visible: false;
 },
}

,然后是一个像这样的对象数组(这里可能有很多项目);

var objs = [ 
    { name: 'item1', visible: false },
    { name: 'item2', visible: false },
    { name: 'item3', visible: false }
];

仅当名称匹配时,如何遍历对象并将可见值分配给数组 -如果对象中的Item1为visible: false,则数组必须反映出这一点

3 个答案:

答案 0 :(得分:2)

myObject放在上方,并使用findobjs中找到对象,然后设置找到的对象的值:

for (let o in myObject) {
  let obj = objs.find(i => i.name == o)
  if(!obj) continue
  obj.visible = myObject[o].visible
}

这是一个有效的示例:

const myObject = {
 item1: {
  visible: true
 },
 item2: {
  visible: true
 },
 item3: {
  visible: false
 }
}

var objs = [ 
    { name: 'item1', visible: false },
    { name: 'item2', visible: false },
    { name: 'item3', visible: false }
]

for (let o in myObject) {
  let obj = objs.find(i => i.name == o)
  if(!obj) continue
  obj.visible = myObject[o].visible
}

console.log(objs)

答案 1 :(得分:2)

最有效的方法是遍历整个数组,因为您只需要迭代一次数组即可。

const myObject = {
 item1: {
  visible: true
 },
 item2: {
  visible: true
 },
 item3: {
  visible: false
 }
};


var objs = [ 
    { name: 'item1', visible: false },
    { name: 'item2', visible: false },
    { name: 'item3', visible: false }
];

objs.forEach(obj => {
  const property = myObject[obj.name];
  if (property) {
    obj.visible = property.visible;
  }
});


console.log(objs);

答案 2 :(得分:0)

const myObject = {
 item1: {
  visible: true
 },
 item2: {
  visible: true
 },
 item3: {
  visible: false
 }
};


var objs = [ 
    { name: 'item1', visible: false },
    { name: 'item2', visible: false },
    { name: 'item3', visible: false }
];

Object.getOwnPropertyNames(myObject).forEach(propertyName => {
  let obj = objs.find(o => o.name === propertyName);
  if (obj) {
    obj.visible = myObject[propertyName].visible;
  }
});

console.log(objs);