如何根据另一个数组中的键/值对为一个数组中的对象分配属性值?
问题描述:
我有一个数组,看起来像这样:如何根据另一个数组中的键/值对为一个数组中的对象分配属性值?
var fields = [{Name: 'FirstName', Value: '', Display: 'First Name'}, {...}]
我有另一个数组,看起来像这样:
var nameValue = [{'FirstName':'John'}, {'LastName':'Doe'}, ...]
如何在指定Value属性的每个字段第一个数组在第二个数组中使用名称/值对?
期望的结果:
fields = [{Name: 'FirstName', Value: 'John', Display: 'First Name'}, {...}]
答
循环,检查,分配:
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;
}
}
}
});
答
首先名称和值组合成一个单一的对象:
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];
}
});
答
你可以先用所有需要的值创建一个对象,并重复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);
是对相同的形式的第一阵列作为第一第二目的,使用不同的名称,或者是它关于名字的信息? – nvioli
假设有一个对象具有与第二个数组中的每个键匹配的名称值。 –
你试过了什么代码?请阅读:http://stackoverflow.com/help/mcve。任何人都可以帮助你只显示部分数据集(甚至没有排队)被显示? – gforce301