javascript - JS - 数组数组
问题描述
我有一些数组:
let someArr = [["A","B"],["A","C"],["C","A"],["B","D"]]
我想要返回对象,该对象包括名称和他的计数器(名称在所有内部数组中重复了多少次。
预期输出为:{"A":3, "B":2,"C":2,"D":1}
初始对象:
let returnObj = {name:"",count:0}
现在我想这样做:
someArr.foreach(arr => {
return (
arr.map(item => {
//check if item in returnObj then count++,
// but how can i check if i have many names and its counter?
//Maybe I need return array of objects?
//else add this item to returnObj and count++
})
);
})
你有其他想法我怎么数名字吗?
解决方案
这就是我为你想出的——希望这就是你所追求的:
var arr = [["A","B"],["A","C"],["C","A"],["B","D"]]
var obj = arr.flat().reduce((acc, item) => ({...acc, [item]:(acc[item]||0) + 1}), {})
console.log(obj)
首先,展平数组数组,并使用一种reduce
方法迭代所有内容,这使得解决方案最短。
在每次迭代时返回修改后的累加器内部reduce
,并为当前扫描的项目返回一个新计数。
如果在累加器中没有找到一个项目(作为键),这意味着它是第一次遇到,然后应该被视为0
并简单地添加1
到它。否则,只需使用该键(项目)的最后一个计数值并添加1
到它。
奖励- 您也可以不同地编写 reduce,无需在每次迭代时解构,始终保持对原始累加器的相同引用:
arr.flat().reduce((acc, item) => (acc[item] = (acc[item]||0) + 1, acc), {})
推荐阅读
- html - 得到所有
- 的
- 硒python3
- 的
- c - 操作指针会导致 valgrind 中出现“无效的 realloc()”
- apache-kafka - 在没有 Schema Registry 的情况下处理 ksqlDB 中的 Avro
- algorithm - 费用。算法分析。中的算法
- c++ - 使用 create() 方法而不是类构造函数的好处?
- python - 在 python 中测试多处理实现
- java - maven 无法从模板或安装文件创建项目
- list - 使用 c# 从文本字符串中查找并提取所有电子邮件地址
- python - PyQt5 中的 OOP 概念使用 Qt Designer
- r - 在 R 中创建一个函数返回一个绘图