如果数组中存在重复值,则增加对象的计数属性

Posted

技术标签:

【中文标题】如果数组中存在重复值,则增加对象的计数属性【英文标题】:Increase count property on object if duplicate value exists in an array 【发布时间】:2022-01-22 12:58:47 【问题描述】:

我想获取 list 变量并将其设置为 updated list 所在的位置,但不确定如何。

const list = [name:'apple',name:'apple',name:'banana'];

const updatedList = [name:'apple', count:2,name:'banana', count: 1];

【问题讨论】:

到目前为止你尝试了什么? 【参考方案1】:

也许这个例子对你有帮助?

const list = [name:'apple',name:'apple',name:'banana'];

const updatedList = Object.values(list.reduce(
  (map, el) => 
    map[el.name] ? map[el.name].count++ : map[el.name] =  ...el,
      count: 1
    ;
    return map;
  , 
));
console.log(updatedList);

【讨论】:

【参考方案2】:
function uptadeLi(list,item,quant) 
    // body...
    for( i in list)
        if (list[i].name === item)
            list[i].count = quant
        
    

使用该功能,您可以设置列表的每个元素,请务必将项目名称作为字符串

【讨论】:

【参考方案3】:

const list = [name:'apple',name:'apple',name:'banana'];
const res = list.reduce((sub,value)=>
 const index= sub.findIndex(i => i.name===value.name)
    if(index !==-1)
    sub[index].count++
else
    sub.push(name:value.name,count:1)
return sub
,[])
console.log(res)

【讨论】:

【参考方案4】:

使用.reduce() 方法将每个项目的计数评估为具有唯一键的对象:

 "apple": 2, "banana": 1 

然后使用Object.entries() 将其转换为以下数组:

[ ["apple", 2], ["banana", 1] ]

最后,使用.map()方法产生:

[ "name": "apple", "count": 2, "name": "banana", "count": 1 ]

演示

const list = [name:'apple',name:'apple',name:'banana'];
const updatedList = Object.entries(
    list.reduce(
        (acc,cur) => (...acc,[cur.name]:(acc[cur.name] || 0) + 1), 
    )
)
.map(([name,count]) => (name,count));

console.log( updatedList );

【讨论】:

以上是关于如果数组中存在重复值,则增加对象的计数属性的主要内容,如果未能解决你的问题,请参考以下文章

如果第二个对象中不存在两个对象,则合并两个对象并保留第一个对象的属性[重复]

在Javascript中推送不重复的数组并更改对象的属性值?

javascript - 如果在子对象中找到值,则搜索嵌套对象数组并返回父对象[重复]

Mongoose:如果值存在于对象数组中的数组中,则过滤数据

jQuery操作属性的方法

js 数组去重方法