2017-05-05 170 views
-1

我有一个数组,看起来像这样:如何根据另一个数组中的键/值对为一个数组中的对象分配属性值?

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

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

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

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

期望的结果:

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

+0

是对相同的形式的第一阵列作为第一第二目的,使用不同的名称,或者是它关于名字的信息? – nvioli

+0

假设有一个对象具有与第二个数组中的每个键匹配的名称值。 –

+1

你试过了什么代码?请阅读:http://stackoverflow.com/help/mcve。任何人都可以帮助你只显示部分数据集(甚至没有排队)被显示? – gforce301

回答

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; 
      } 
     } 
    } 
}); 
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]; 
    } 
}); 
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);

相关问题