分类出来的数组有三种格式,看需要哪种
方法一:
let list = [
{ id: 1, val: 100, name: '张' },
{ id: 2, val: 100, name: '刘' },
{ id: 3, val: 300, name: '林' },
{ id: 4, val: 200, name: '许' },
{ id: 5, val: 100, name: '周' },
{ id: 6, val: 200, name: '张' }
]
let nData = classifyArr(list, 'val')
console.log(nData) //格式见下图
//arr传需要分类的数组,objName传根据哪个属性值进行分类
function classifyArr(arr, objName) {
const dataArr = []
arr.forEach((item) => {
const key = item[objName]
let res = dataArr.some((node) => {
// 判断相同,有就添加到当前项
if (node[objName] == key) {
node.list.push(item)
return true
}
})
if (!res) {//如果没找相同添加一个新对象
let newObj = {
list: [item]
}
newObj[objName] = key
dataArr.push(newObj)
}
})
return dataArr
}
nData打印出来的格式为:

方式二:
let list = [
{ id: 1, val: 100, name: '张' },
{ id: 2, val: 100, name: '刘' },
{ id: 3, val: 300, name: '林' },
{ id: 4, val: 200, name: '许' },
{ id: 5, val: 100, name: '周' },
{ id: 6, val: 200, name: '张' }
]
let newData = {}
list.forEach((item) => {
// 新建属性名
if (Object.keys(newData).indexOf('' + item.val) === -1) {
newData[item.val] = []
}
// 对应插入属性值
newData[item.val].push(item)
})
console.log(newData))//格式见下图

方式三:格式为[ [ ],[ ] ]
以前写过不写了、链接:数组根据属性对象进行分类
JavaScript数组按属性分类
2700

被折叠的 条评论
为什么被折叠?



