循环遍历一个对象,并从另一个对象设置其值JavaScript的
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了循环遍历一个对象,并从另一个对象设置其值JavaScript的相关的知识,希望对你有一定的参考价值。
说我有两个对象:
let obj1 = {
name: 'obj 1',
id: 1,
color: "#fff",
pages: []
}
let obj2 = {
name: 'obj 2',
id: 2,
color: "#ddd"
}
我想写一个跟随这个逻辑的函数'循环通过obj1,如果obj1和obj1都有相同的属性,用obj2的值更新obj1的属性'
所以结果会返回obj1值:
{
name: 'obj 2',
id: 2,
color: "#ddd",
pages: []
}
我有一个处理对象的问题,因为我不能每次或映射它们
谢谢!
答案
您可以使用
var a = [obj1,obj2];
obj1 = Object.assign(...a);
let obj1 = {
name: 'obj 1',
id: 1,
color: "#fff",
pages: []
}
let obj2 = {
name: 'obj 2',
id: 2,
color: "#ddd"
}
var a = [obj1,obj2];
obj1 = Object.assign(...a);
console.log(obj1)
另一答案
您的问题意味着您不希望将obj2
中的属性复制到obj1
中不存在的obj1
。如果情况永远不会如此(即obj2
总是obj1
的一个子集),那么Object.assign
确实是最好的方式。
如果obj2
可以拥有你不想复制的属性,这里只是一个简单的for
循环:
for (const prop in obj2) {
if (prop in obj1) {
obj1[prop] = obj2[prop];
}
}
这将迭代对象的所有可枚举属性,包括其原型中的“继承”属性。
如果要限制此对象自己的属性,可以使用Object.keys
:
for (const prop of Object.keys(obj2)) {
if (prop in obj1) {
obj1[prop] = obj2[prop];
}
}
请注意,任一方法都只会复制“普通”属性。属于symbols的属性必须通过Object.getOwnPropertySymbols
单独处理。
另一答案
您可以像这样使用传播:
let obj1 = {
name: 'obj 1',
id: 1,
color: "#fff",
pages: []
}
let obj2 = {
name: 'obj 2',
id: 2,
color: "#ddd"
}
obj1 = { ...obj1, ...obj2 };
console.log(obj1);
另一答案
这可以确保obj1
仅从obj2
获取更新,而不是任何新属性:
let obj1 = {
name: 'obj 1',
id: 1,
color: "#fff",
pages: []
}
let obj2 = {
name: 'obj 2',
id: 2,
color: "#ddd",
somethingElse: 'will not add this'
}
const result = Object.entries(obj1).reduce((a, c) => {
a[c[0]] = obj2[c[0]] !== undefined ? obj2[c[0]] : c[1];
return a;
}, {});
console.log(result);
以上是关于循环遍历一个对象,并从另一个对象设置其值JavaScript的的主要内容,如果未能解决你的问题,请参考以下文章
在 Reducer 中保存设置并从另一个 Reducer 访问它们?