如何根据另一个数组中的键/值对为一个数组中的对象分配属性值?

时间:2017-05-05 16:12:33

标签: javascript arrays

我有一个如下所示的数组:

var fields = [{Name: 'FirstName', Value: '', Display: 'First Name'}, {...}]

我有另一个看起来像这样的数组:

var nameValue = [{'FirstName':'John'}, {'LastName':'Doe'}, ...]

如何使用第二个数组中的名称/值对为第一个数组中的每个字段分配Value属性?

期望的结果:

fields = [{Name: 'FirstName', Value: 'John', Display: 'First Name'}, {...}]

3 个答案:

答案 0 :(得分:2)

您可以首先创建一个包含所有需要值的对象并迭代fields,检查具有该名称的属性是否存在,然后分配该值。

var fields = [{ Name: 'FirstName', Value: '', Display: 'First Name' }],
    nameValue = [{ FirstName: 'John' }, { LastName: 'Doe' }],
    values = Object.assign({}, ...nameValue);
   
fields.forEach(o => (o.Name in values) && (o.Value = values[o.Name]));

console.log(fields);

答案 1 :(得分:0)

循环,检查,分配:

fields.forEach(function(field) {
    let key = field.Name;
    for (let i = 0; i < nameValue.length; i++) {
        for (let nameKey in nameValue[i]) {
            if (nameKey == key) {
                field.Value = nameValue[i][key]
                break;
            }
        }
    }
});

答案 2 :(得分:0)

首先将所有名称和值组合成一个对象:

var nvObject = {};
nameValue.forEach(function (e) {
    for (key in e) {
        nvObject[key] = e[key];
    }
});

现在nvObject = { FirstName: 'John', LastName: 'Doe', ... }。也许你可以在第一时间构建nameValue,而不是将它作为一个对象数组。

然后你可以用它来更新另一个数组。

$fields.forEach(function (e) {
    if (e.Name in nvObject) {
        e.Value = nvObject[e.Name];
    }
});