大佬教程收集整理的这篇文章主要介绍了根据 ES6 中的值从数组中删除重复项,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个数组如下:
const array = [
{ID: 3,amount: 100,productID: 10,title: "color/Red",variantChildren: Array(0)},{ID: 4,amount: 5,title: "color/Green",variantChildren: Array(2)},{amount: 0,variantChildren: {…},title: "color/Red"},title: "color/Green"},title: "color/Purple"}
]
我需要删除数量为 0 的重复项。我想弄清楚如何使用 .filter()
或 .forEach()
const newArray = [
{ID: 3,title: "color/Purple"}
]
const data = [
{id: 3,amount: 100,productId: 10,title: "Color/Red",variantChildren: Array(0)},{id: 4,amount: 5,title: "Color/Green",variantChildren: Array(2)},{amount: 0,variantChildren:{},title: "Color/Red"},variantChildren: {},title: "Color/Green"},title: "Color/Purple"},{id: 5,amount: 3,productId: 11,{id: 6,amount: 10,productId: 12,{amount: 2,];
const removeZeroamountDuplicates = arr => {
// group items by title
const titleItemsmap = arr.reduce((acc,item) => {
const { title,amount } = item;
if(acc[title]) acc[title].push(item);
else acc[title] = [item];
return acc;
},{});
// iterate over each title's items
const res = Object.values(titleItemsmap).reduce((acc,titleItems) => {
// if list has more than one elements remove zero-amount items,otherwise keep the only element
const items = titleItems.length > 1
? titleItems.filter(item => item.amount !== 0)
: titleItems;
// merge items with acc
return [...acc,...items]
},[]);
return res;
}
console.log( removeZeroamountDuplicates(data) );
,
将数组缩减为Map,只添加不存在的项,或存在的项,以及存在但总数大于0的项。
将 Map 的 .values()
迭代器转换为带有 Array.from()
的数组。
const data = [{"id":3,"amount":100,"productId":10,"title":"Color/Red","variantChildren":[]},{"id":4,"amount":5,"title":"Color/Green","variantChildren":[null,null]},{"amount":0,"variantChildren":{},"title":"Color/Red"},"title":"Color/Green"},"title":"Color/Purple"}];
const result = Array.from(
data.reduce((acc,o) =>
!acc.has(o.titlE) || o.amount > 0 ? acc.set(o.title,o) : acc,new Map())
.values()
);
console.log(result);
,
Filter MDN
那个代码有点不可读。基本上,filter
映射到数组。提供的函数应该返回 true 或 false。如果为真,则将当前值返回到新数组,否则,跳过它。我提供的函数映射到临时数组,它会更新每个值,因为我们需要检查每个元素的 amount
。所以映射的数组为每个元素返回 amount
。使用新数组,我们检查 amount
是否已经存在,是对还是错。
要使用 .filter
或 .forEach
,您必须检查每个元素,如果该元素可以在较低的索引中找到,则将其删除。
以上是大佬教程为你收集整理的根据 ES6 中的值从数组中删除重复项全部内容,希望文章能够帮你解决根据 ES6 中的值从数组中删除重复项所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。