说我有一个像这样的对象(这里可能有很多物品);
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
,则数组必须反映出这一点
答案 0 :(得分:2)
将myObject
放在上方,并使用find在objs
中找到对象,然后设置找到的对象的值:
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);