从下面的对象中,我已串联所有“角色”键值:
{
"office1": {
"roles": [
{
"name": "Test 0",
"email": "test0@test.com"
},
{
"name": "Test 1",
"email": "test1@test.com"
},
{
"name": "Test 2",
"email": "test2@test.com"
},
{
"name": "Test 3",
"email": "test3@test.com"
}
]
},
"office2": {
"roles": [
{
"name": "Test 3",
"email": "test3@test.com"
},
{
"name": "Test 4",
"email": "test4@test.com"
},
{
"name": "Test 5",
"email": "test5@test.com"
}
]
}
}
所以新的串联数组“ combinedRoles”如下所示,它们具有重复的值(例如{“ name”:“ Test 3”,“ email”:“ test3@test.com”}。我想更新所有其他重复项数组中的对象,如果所有重复对象中的任何一个对象都被更新,则在下面的示例中,数组元素3和4具有相似的值,因此,如果我更新元素3,它也应更新元素4,反之亦然。 / p>
combinedRoles = [
{
'name': 'Test 0',
'email': 'test0@test.com'
},
{
'name': 'Test 1',
'email': 'test1@test.com'
},
{
'name': 'Test 2',
'email': 'test2@test.com'
},
{
'name': 'Test 3',
'email': 'test3@test.com'
},
{
'name': 'Test 3',
'email': 'test3@test.com'
},
{
'name': 'Test 4',
'email': 'test4@test.com'
},
{
'name': 'Test 5',
'email': 'test5@test.com'
}
]
答案 0 :(得分:2)
如果需要一起更新的对象总是完全相同,则创建引用数组而不是使用对象文字可能会起作用。
const obj0 = {'name': 'Test 0',
'email': 'test0@test.com'
}
const obj1 = {'name': 'Test 1',
'email': 'test1@test.com'
}
const obj2 = {'name': 'Test 2',
'email': 'test2@test.com'
}
const obj3 = {'name': 'Test 3',
'email': 'test3@test.com'
}
obj = [obj0, obj1, obj2, obj3, obj3]
现在obj [3]和obj [4]是对同一对象的两个引用,因此您对其执行的任何操作都会影响数组中的两个引用:
obj[3].email = "foo"
console.log(obj[4].email) // "foo"
如果对象不总是相同,那么您可以编写一个函数来遍历数组,找到每个匹配的对象,然后手动对其进行更新,但这取决于您如何定义两个匹配的对象。