給定條件下,如果兩個元素相同但其中一個元素為is ,如何someArray根據屬性從如下陣列中洗掉重復項,則將保留原始元素(沒有新型別)?namenametypenew
someArray = [{id: 1, name:"apple"}, {id: 2, name:"mango"}, {id: 3, name:"apple", type: "new"}, {id: 4, name:"orange"}, {id: 5, name:"orange", type: "new"}, {id: 6, name: "pineapple", type: "new"}]
到
[{id: 1, name:"apple"}, {id: 2, name: "mango"}, {id: 4, name:"orange"}, {id: 6, name: "pineapple", type: "new"}]
uj5u.com熱心網友回復:
您可以使用Array.prototype.reduce并過濾掉滿足條件的專案。
const
input = [
{ id: 1, name: "apple" },
{ id: 2, name: "mango" },
{ id: 3, name: "apple", type: "new" },
{ id: 4, name: "orange" },
{ id: 5, name: "orange", type: "new" },
{ id: 6, name: "pineapple", type: "new" },
],
output = Object.values(
input.reduce((r, o) => {
if (!r[o.name] || (r[o.name].type === "new" && o.type !== "new")) {
r[o.name] = o;
}
return r;
}, {})
);
console.log(output);
您也可以使用傳播語法來做到這一點。
const
input = [
{ id: 1, name: "apple" },
{ id: 2, name: "mango" },
{ id: 3, name: "apple", type: "new" },
{ id: 4, name: "orange" },
{ id: 5, name: "orange", type: "new" },
{ id: 6, name: "pineapple", type: "new" },
],
output = Object.values(
input.reduce(
(r, o) =>
!r[o.name] || (r[o.name].type === "new" && o.type !== "new")
? { ...r, [o.name]: o }
: r,
{}
)
);
console.log(output);
uj5u.com熱心網友回復:
您可以迭代您的陣列并評估是否為“型別:新”并且不存在,然后彈出該專案。
let someArray = [{
id: 1,
name: "apple"
}, {
id: 2,
name: "mango"
}, {
id: 3,
name: "apple",
type: "new"
}, {
id: 4,
name: "orange"
}, {
id: 5,
name: "orange",
type: "new"
}, {
id: 6,
name: "pineapple",
type: "new"
}];
console.info('Initial value:' JSON.stringify(someArray));
someArray.forEach(function(item, index, object) {
if (item.type === 'new' && someArray.filter(val => val.name === item.name && !val.type)) {
object.splice(index, 1);
}
});
console.info('Desired Result:' JSON.stringify(someArray));
uj5u.com熱心網友回復:
let someArray = [{id: 1, name:"apple"}, {id: 2, name:"mango"}, {id: 3, name:"apple", type: "new"}, {id: 4, name:"orange"}, {id: 5, name:"orange", type: "new"}, {id: 6, name: "pineapple", type: "new"}]
const result = someArray.reduce((resArr, currentArr) => {
let other = resArr.some((ele) => currentArr.name === ele.name)
if (!other) resArr.push(currentArr)
return resArr
}, [])
console.log(result)
uj5u.com熱心網友回復:
您可以使用Map來按名稱俱樂部值,如果有兩個具有相同名稱的值,只需使用沒有名稱的值type = "new"
let someArray = [{id: 3, name:"apple", type: "new"}, {id: 1, name:"apple"}, {id: 2, name:"mango"}, {id: 4, name:"orange"}, {id: 5, name:"orange", type: "new"}, {id: 6, name: "pineapple", type: "new"}]
function getUnique(arr){
let mapObj = new Map()
arr.forEach(v => {
let prevValue = mapObj.get(v.name)
if(!prevValue || prevValue.type === "new"){
mapObj.set(v.name, v)
}
})
return [...mapObj.values()]
}
console.log(getUnique(someArray))
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/475399.html
