簡體   English   中英

如何基於另一個數組中的鍵/值對為一個數組中的對象分配屬性值?

[英]How do I assign property values for objects in one array based on key/value pairs in another?

我有一個看起來像這樣的數組:

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

我有另一個看起來像這樣的數組:

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

如何使用第二個數組中的名稱/值對為第一個數組中的每個字段分配Value屬性?

所需結果:

fields = [{Name: 'FirstName', Value: 'John', Display: 'First 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); 

循環,檢查,分配:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM