[英]Comparing an array with an object
我正在嘗試構建一個簡單的統計工具,該工具可接收一堆CSV,將其解析為JSON,執行一些跨數據操作並輸出帶有格式化統計信息的新CSV。 我對JS很陌生,在嘗試在對象與數組之間進行數據交叉時遇到了麻煩。
解析后,我收到一個大對象(統計信息),格式如下:
{
'operator_1':
conversions:
[
{
id: '3f002ab58',
date: 13/03/2016
},
{
id: '4d002fb18',
date: 14/03/2016
}
]
'opertor_2':
conversions:
[
{
id: '1e03021149',
date: 21/03/2016
},
{
id: '4bbc102fb18',
date: 11/03/2016
}
]
}
我還有另一個看起來像這樣的數組(例如,countries_array []):
[
{id : '4bbc102fb18', country : 'russia'},
{id : '33f3897300a', country : 'australia'},
{id : '4d002fb18', country : 'usa'}
]
我想做的是遍歷country_array [],在大對象(統計信息)中查找其ID的所有出現,然后將country屬性附加到正確的相應運算符的對象的轉換數組。 因此,在我執行attach_countries(stats,countries_array [])之后,我將收到如下所示的相同對象(或一個新對象,在這種情況下沒有關系):
{
'operator_1':
conversions:
[
{
id: '3f002ab58',
date: 13/03/2016
},
{
id: '4d002fb18',
date: 14/03/2016,
country : 'usa' //usa was added
}
]
'opertor_2':
conversions:
[
{
id: '1e03021149',
date: 21/03/2016
},
{
id: '4bbc102fb18',
date: 11/03/2016,
country : 'russia' //russia was added
}
]
}
您為對象提供的語法無效。 假設操作員屬性是具有conversions
屬性的對象,則可以使用下面的ES6解決方案。 它首先構建一個哈希表,以避免您每次都需要遍歷各個國家,但是可以通過id直接訪問它們:
const hash = new Map(countries_array.map( item => [item.id, item.country] ));
Object.keys(stats).forEach(key => {
stats[key].conversions.forEach(item => {
if (hash.has(item.id)) item.country = hash.get(item.id);
});
});
var stats = { operator_1: { conversions: [ { id: '3f002ab58', date: '13/03/2016' }, { id: '4d002fb18', date: '14/03/2016' } ], }, operator_2: { conversions: [ { id: '1e03021149', date: '21/03/2016' }, { id: '4bbc102fb18', date: '11/03/2016' } ] } }; countries_array = [ {id : '4bbc102fb18', country : 'russia'}, {id : '33f3897300a', country : 'australia'}, {id : '4d002fb18', country : 'usa'} ]; const hash = new Map(countries_array.map( item => [item.id, item.country] )); Object.keys(stats).forEach(key => { stats[key].conversions.forEach(item => { if (hash.has(item.id)) item.country = hash.get(item.id); }); }); console.log(stats);
.as-console-wrapper { max-height: 100% !important; top: 0; }
修復了有錯誤的JSON代碼。 忽略您的“日期”格式。
var stats = { 'operator_1': { conversions: [ { id: '3f002ab58', date: 13/03/2016 }, { id: '4d002fb18', date: 14/03/2016 } ] }, 'opertor_2': { conversions: [ { id: '1e03021149', date: 21/03/2016 }, { id: '4bbc102fb18', date: 11/03/2016 } ] } } var countries = [ {id : '4bbc102fb18', country : 'russia'}, {id : '33f3897300a', country : 'australia'}, {id : '4d002fb18', country : 'usa'} ] countries.map(country => { Object.keys(stats).map(operator => { let match = stats[operator].conversions.find(item => item.id === country.id) if (match) match.country = country.country }) }) console.log(stats)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.