如果重复项之一已更新,则如何更新对象数组中其他重复对象的值

时间:2018-11-07 19:01:23

标签: javascript

从下面的对象中,我已串联所有“角色”键值:

{
    "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'
    }
]

1 个答案:

答案 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"

如果对象不总是相同,那么您可以编写一个函数来遍历数组,找到每个匹配的对象,然后手动对其进行更新,但这取决于您如何定义两个匹配的对象。