为了账号安全,请及时绑定邮箱和手机立即绑定

Javascript:有条件地从数组中删除重复的对象

Javascript:有条件地从数组中删除重复的对象

慕的地10843 2023-09-07 17:10:12
我有一个看起来像这样的数组:var array = [  { name: "product1", rating: 1 },  { name: "product3", rating: 2 },  { name: "product1", rating: 2 },  { name: "product2", rating: 2 },  { name: "product3", rating: 1 },  { name: "product4", rating: 2 },  { name: "product2", rating: 2 }]我想消除具有重复名称的对象,但想保留评级最低的对象。因此最终得到:var newarray = [  { name: "product1", rating: 1 },  { name: "product2", rating: 2 },  { name: "product3", rating: 1 },  { name: "product4", rating: 2 }]使用过滤器,由于评级不同,我最终在 newarray 中得到两个 Product1 和 Product3。通过名称定位,我最终得到了基于其原始位置的数组中的对象,这是行不通的。我正在寻找一种使用普通 JavaScript 的方法来比较每个重复对象的值并推送具有最低值的对象。每个产品名称最多可以出现三次。值只能是 1 或 2。
查看完整描述

2 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

您可以使用reduce按名称分组,其中每个名称的评级最低的元素


const array = [

  { name: "product1", rating: 1 },

  { name: "product3", rating: 2 },

  { name: "product1", rating: 2 },

  { name: "product2", rating: 2 },

  { name: "product3", rating: 1 },

  { name: "product4", rating: 2 },

  { name: "product2", rating: 2 },

]


const res = Object.values(

  array.reduce((acc, el) => {

    if (!acc[el.name] || acc[el.name].rating > el.rating) {

      acc[el.name] = el

    }

    return acc

  }, {})

)


console.log(res)


查看完整回答
反对 回复 2023-09-07
?
慕哥9229398

TA贡献1877条经验 获得超6个赞

由于已经提到了reduce,我想我会给出一个使用.filter()的例子,因为你可以在不同的领域获得一些灵活性。


var array = [

  { name: "product1", rating: 1 },

  { name: "product3", rating: 2 },

  { name: "product1", rating: 2 },

  { name: "product2", rating: 2 },

  { name: "product3", rating: 1 },

  { name: "product4", rating: 2 },

  { name: "product2", rating: 2 }

];

var newArray = array.filter((value,iteration,arr)=>{

    for(var i = 0; i < arr.length; i++){

        if(value.name === arr[i].name && iteration != i){

            if(value.rating > arr[i].rating){

                return false

            }else if(value.rating === arr[i].rating && iteration > i){

                return false

            }

        }

    }

    return true

});

/*newArray

[

    { name: 'product1', rating: 1 },

    { name: 'product2', rating: 2 },

    { name: 'product3', rating: 1 },

    { name: 'product4', rating: 2 }

]*/

在大多数情况下,Reduce 应该更快,但你永远不知道。


查看完整回答
反对 回复 2023-09-07
  • 2 回答
  • 0 关注
  • 92 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信