如图数组一
想得到数组二,按 name
进行分类,怎么操作
let cache = {}, result = []
list.forEach(item => {
if(cache[item.name]){
cache[item.name].push(item)
}else{
result.push(cache[item.name] = [item])
}
})
cache = null
console.log(result)
我提供一种新的解决思路吧!
const map = new Map()
const arr = []
arr.forEach(item => map.get(item.name) ? map.get(item.name).push(item) : map.set(item.name,[item]))
const newArr = Array.from(map.values())
当然三元这么用不符合规范,为了代码更优雅些自己抉择!
13 回答13k 阅读
8 回答2.8k 阅读
2 回答5.2k 阅读✓ 已解决
5 回答1.4k 阅读
7 回答2.2k 阅读
3 回答2.3k 阅读✓ 已解决
3 回答1k 阅读✓ 已解决
如果用 Lodash
这个算法做出来之后,结果并不是题主那个顺序,而是按 name 首次出现的先后顺序。如果想按题主那个顺序,还需要排个序
排序依据:
这里参数采用了复杂的解构。因为
groupedList
的每个元素是个数组,其 name 都是相同的,只需要取第 1 个的 name 出来进行比较就好了。不过,如果计算量较大
indexOf(b)
会比较慢,因为它是采用遍历查找的方法来找到索引。如果要快,可以先准备一个映射表