2017-05-05 246 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);

相關問題