我有兩個這樣的陣列,我已經過濾了這兩個陣列并將它們組合在一個最終陣列中并洗掉重復值并保留一個
let arr1 = [
{
name : 'abc',
std: '1'
},
{
name : 'abc1',
std: '2'
},
{
name : 'abc2',
std: '3'
},
]
let arr2 = [
{
name : 'abc3',
std: '1'
},
{
name : 'abc4',
std: '2'
},
{
name : 'abc2',
std: '3'
},
]
像我希望abc2這樣的預期輸出只得到一次
let finalArr = [
{
name : 'abc',
std: '1'
},
{
name : 'abc1',
std: '2'
},
{
name : 'abc2',
std: '3'
},
{
name : 'abc3',
std: '1'
},
{
name : 'abc4',
std: '2'
},
]
所以任何人都可以幫助我解決我嘗試了很多方法但沒有作業并且有時我出錯的方法。
uj5u.com熱心網友回復:
您可以使用給定名稱的Set并使用該集合過濾合并陣列。
let arr1 = [{name : 'abc',std: '1'},{name : 'abc1',std: '2'},{ name : 'abc2', std: '3'}]
let arr2 = [{name : 'abc3', std: '1' }, { name : 'abc4', std: '2' }, {name : 'abc2', std: '3'}]
const names = new Set(arr1.map(({name}) => name));
const filteredArray = [...arr1, ...arr2.filter(({name}) => !names.has(name))];
console.log(filteredArray)
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
uj5u.com熱心網友回復:
Id 在陣列中應該是唯一的
arr.reduce((acc, current) => {
const x = acc.find(item => item.id === current.id);
if (!x) {
return acc.concat([current]);
} else {
return acc;
}
}, []);
uj5u.com熱心網友回復:
還有另一種方式,你有選擇:)
const arr1 = [{
name: 'abc',
std: '1'
}, {
name: 'abc1',
std: '2'
}, {
name: 'abc2',
std: '3'
}, ]
const arr2 = [{
name: 'abc3',
std: '1'
}, {
name: 'abc4',
std: '2'
}, {
name: 'abc2',
std: '3'
}, ]
function mapper(v) {
return [v.name, v]
};
const map = new Map(arr1.map(mapper).concat(arr2.map(mapper)));
console.log([...map.values()])
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/359756.html
標籤:javascript 数组 有角的
下一篇:如何使用axios進行發布請求
