我有兩個陣列,物件包含國家及其國家代碼。其中一個陣列有英文國家,也有國家的 isoCode 鍵。看起來像:
[{
"name": "Denmark",
"dialCode": " 45",
"isoCode": "DK",
},
{
"name": "Germany",
"dialCode": " 49",
"isoCode": "DE",
}]
另一個陣列具有丹麥語的國家名稱和撥號代碼,但沒有 isoCode。
[{
"name": "Danmark",
"dialCode": " 45",
},
{
"name": "Tyskland",
"dialCode": " 49",
}]
現在我想將isoCode從英語陣列移動/復制到丹麥語,與dialCode匹配。但我對如何做到這一點有點迷茫。
我有一個匹配
let result = this.dkList.filter(country1 => this.countryList.some(country2 => country2.dialCode === country1.dialCode.replace('00 ', ' ').trim()))
我的預期結果應該是
[{
"name": "Danmark",
"dialCode": " 45",
"isoCode": "DK"
},
{
"name": "Tyskland",
"dialCode": " 49",
"isoCode": "DE"
}
]
uj5u.com熱心網友回復:
該.filter()方法用于從陣列中洗掉專案,這不是您在這里要執行的操作,而是要映射(即:轉換)您的資料。
您可以首先創建一個從您的第一個陣列呼叫的MapisoLookup,該陣列創建基于鍵的。在dialCode和價值觀基礎上isoCode的陣列英寸 然后,您可以使用此 Map 來獲取 ISO 代碼dialCode。創建 Map 查找后,您可以.map()在第二個 arr2 上使用將物件映射到具有isoCode屬性的新物件,該屬性保存從 Map 查找中獲得的值:
const arr1 = [{ "name": "Denmark", "dialCode": " 45", "isoCode": "DK", }, { "name": "Germany", "dialCode": " 49", "isoCode": "DE", }];
const arr2 = [{ "name": "Danmark", "dialCode": " 45", }, { "name": "Tyskland", "dialCode": " 49", }];
const isoLookup = new Map(arr1.map(obj => [obj.dialCode, obj.isoCode]));
const res = arr2.map(obj => ({...obj, isoCode: isoLookup.get(obj.dialCode)}));
console.log(res);
創建一個用作查找的 Map 可以使您的代碼很好地擴展,就像arr1為您的.map()方法的每次迭代執行搜索一樣。
uj5u.com熱心網友回復:
只需遍歷所有陣列元素,比較它們的 dialCodes 并將 isoCodes 復制到丹麥版本。
const en = [...]; // array with english data
const den = [...]; // array with danish data
// it will work if en.length = den.length
for (let i = 0; i < en.length; i ) {
if (den[i].dialCode === en[i].dialCode) { // compare en & den dial codes
den[i].isoCode = en[i].isoCode;
}
}
uj5u.com熱心網友回復:
var en = []
var den = []
den.forEach(eni => {
en.forEach(deni => {
if (eni.dialcode == deni.dialcode) {
den.dialcode = en.dialcode
}
})
})
現在你應該在 var den 中有陣列
uj5u.com熱心網友回復:
一行解決方案,如果不介意的話
const arr1 = [{ "name": "Denmark", "dialCode": " 45", "isoCode": "DK", }, { "name": "Germany", "dialCode": " 49", "isoCode": "DE", }];
const arr2 = [{ "name": "Danmark", "dialCode": " 45", }, { "name": "Tyskland", "dialCode": " 49", }];
result = arr1.map(({ dialCode, isoCode }) => ({ name: arr2.find((o) => dialCode === o.dialCode).name, dialCode, isoCode }));
console.log(result);
uj5u.com熱心網友回復:
因為兩個串列都包含dialCode:使用Array.prototype.reduce()你可以arrEnglish根據dialCode屬性創建一個散列,最后從Array.prototype.map() arrDanish串列中得到結果
代碼:
const arr1 = [{name: 'Denmark',dialCode: ' 45',isoCode: 'DK',},{name: 'Germany',dialCode: ' 49',isoCode: 'DE'}]
const arr2 = [{name: ' Danmark',dialCode: ' 45',},{name: 'Tyskland',dialCode: ' 49'}]
const hash = arr1.reduce((a, c) => ((a[c.dialCode] = c.isoCode), a), {});
const restult = arr2.map(c => ({ ...c, isoCode: hash[c.dialCode] }));
console.log(restult);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/376513.html
標籤:javascript 数组 目的
