程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了根据 ES6 中的值从数组中删除重复项大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决根据 ES6 中的值从数组中删除重复项?

开发过程中遇到根据 ES6 中的值从数组中删除重复项的问题如何解决?下面主要结合日常开发的经验,给出你关于根据 ES6 中的值从数组中删除重复项的解决方法建议,希望对你解决根据 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()

因此项目 [2][3] 将被删除,并返回一个新数组:

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);

,

var unfiltered = [{amount: 0},{amount: 0},{amount: 1},{amount: 2}]
var tmpArray = [];
var filtered = unfiltered.filter((val,index,arr) => {
  var tmpTrue = !(tmpArray.map(v => v.amount).includes(val.amount))
  tmpArray.push(val)
  return tmpTrue;
});
console.log(filtered);

Filter MDN

那个代码有点不可读。基本上,filter 映射到数组。提供的函数应该返回 true 或 false。如果为真,则将当前值返回到新数组,否则,跳过它。我提供的函数映射到临时数组,它会更新每个值,因为我们需要检查每个元素的 amount。所以映射的数组为每个元素返回 amount。使用新数组,我们检查 amount 是否已经存在,是对还是错。

,

要使用 .filter.forEach,您必须检查每个元素,如果该元素可以在较低的索引中找到,则将其删除

const array = [
    {id: 3,title: "Color/Purple"}
]

const result = array.filter((el,i) => {
    const dupIndex = array.findIndex(e => e.amount === el.amount)
    return i <= dupIndex
})

console.log(result)

大佬总结

以上是大佬教程为你收集整理的根据 ES6 中的值从数组中删除重复项全部内容,希望文章能够帮你解决根据 ES6 中的值从数组中删除重复项所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:根据