如果数组中存在重复值,则增加对象的计数属性
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 - 如果在子对象中找到值,则搜索嵌套对象数组并返回父对象[重复]