我有兩個不同的陣列。一種是這樣的:
const arrOne = [
[{sender: '0000', to: '1111'}],
[{sender: '2222', to: '1111'}]
];
另一個陣列就像:
const arrTwo = [
{
firstName: 'John',
LastName: 'Doe',
num: '1111'
}
]
現在我想匹配to來自 arrOne 和num陣列 2 的鍵,如果他們計算,第一個陣列應該用名字和姓氏更新。因此,預期的輸出將是這樣的:
const arrOne = [
[{sender: '0000', to: '1111', firstName: 'John', lastName: 'Doe'}],
[{sender: '2222', to: '1111', firstName: 'John', lastName: 'Doe'}]
];
這是我嘗試過的:
arrOne = arrOne.map(item => {
const item2 = arrTwo.find(i2 => i2.num == item.to);
return item2 ? { ...item, ...item2 } : item;
});
提前致謝。
uj5u.com熱心網友回復:
你arrOne是一個陣列陣列,所以你需要考慮到這一點。我還假設您需要根據預期輸出num從arrTwo元素中排除。
let arrOne = [
[{sender: '0000', to: '1111'}],
[{sender: '2222', to: '1111'}]
];
const arrTwo = [
{
firstName: 'John',
lastName: 'Doe',
num: '1111'
}
];
arrOne = arrOne.map(item => {
const item2 = arrTwo.find(i2 => i2.num == item[0].to);
return item2 ? [{ ...item[0], firstName: item2.firstName, lastName: item2.lastName }] : item;
});
console.log(arrOne);
uj5u.com熱心網友回復:
您幾乎成功了,只需更改item為item[0](因為資料中的資料arrOne是嵌套陣列),并添加[]以包裝回傳的結果
let arrOne = [
[{sender: '0000', to: '1111'}],
[{sender: '2222', to: '1111'}]
]; // it's nested array here
const arrTwo = [
{
firstName: 'John',
LastName: 'Doe',
num: '1111'
}
]
arrOne = arrOne.map(item => {
const item2 = arrTwo.find(i2 => i2.num == item[0].to)
return item2 ? [{ ...item[0], ...item2 }] : [item[0]]; // need to return as array
});
console.log(arrOne)
uj5u.com熱心網友回復:
試試這段代碼,
const arrOne = [
[{ sender: "0000", to: "1111" }],
[{ sender: "2222", to: "1111" }],
];
const arrTwo = [
{
firstName: "John",
LastName: "Doe",
num: "1111",
},
];
const newarrtt = () => {
let val;
const newarry = arrOne.map(item => {
val = arrTwo.find(x => {
return x.num, item[0].to;
});
if (val) {
return [
{
...item[0],
firstName: val.firstName,
LastName: val.LastName,
},
];
}
val = null;
});
console.log(newarry);
};
newarrtt();
你錯過的是,你的映射函式不是回傳物件,它是陣列。所以你需要訪問諸如 item[0] 之類的東西。
uj5u.com熱心網友回復:
此技術將僅過濾掉不需要的“num”屬性:
const arrOne = [[{sender: '0000', to: '1111'}],[{sender: '2222', to: '1111'}]];
const arrTwo = [{firstName: 'John', LastName: 'Doe',num: '1111'}];
console.log(arrOne.map(i=>[{...i[0], ...Object.fromEntries(Object.entries(
arrTwo.find(j=>j.num===i[0].to)??{}).filter(([k,v])=>k!=='num')
.map(([k,v])=>[k==='LastName'?'lastName':k, v]))}]));
如果您需要將“姓氏”屬性重命名為“姓氏”,您也可以這樣做:
const arrOne = [[{sender: '0000', to: '1111'}],[{sender: '2222', to: '1111'}]];
const arrTwo = [{firstName: 'John', LastName: 'Doe',num: '1111'}];
console.log(arrOne.map((i,o)=>[{...i[0], ...(o=(arrTwo.find(j=>j.num===i[0].to)),
(!o?{}:{firstName: o.firstName, lastName: o.LastName}))}]));
這兩種技術都適用于找不到num匹配項的情況。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/527406.html
標籤:javascript
上一篇:帶有連接節點的鏈接的聚集氣泡
下一篇:`setState`不更新陣列
