使用js,根据数组中对象属性值的不同将数组进行分组-1
程序员文章站
2022-04-03 08:52:34
...
需求:将下面数组-对象中的index_name相同的对象抽离出来,放入一个新数组中
let tempArr = [
{ domain: 'a', index_name: '云淡风轻' },
{ domain: 'b', index_name: '递归' },
{ domain: 'c', index_name: '云淡风轻' },
{ domain: 'd', index_name: '遍历' },
{ domain: 'e', index_name: '云淡风轻' },
{ domain: 'f', index_name: '云淡风轻' },
{ domain: 'g', index_name: '递归' }
]
解决办法:
// 承接分类的新数组,整个initialArr处理完成之后,会根据不同的属性生成一个二维数组
let newArrA = []
const formateArrData = (initialArr, name, newArr) => {
// 判定传参是否符合规则
if (!(initialArr instanceof Array) || !(newArr instanceof Array)) {
return '请传入正确格式的数组'
}
if (!name) {
return '请传入对象属性'
}
// 每一个类型的单独数组,注意此处不能return出每个alikeArr
// 因为递归的返回值只返回最后一次的值
let alikeArr = []
let propertyName = ''
if (initialArr.length > 0) {
propertyName = initialArr[0][`${name}`]
let tempArr = []
// 将拥有共同propertyName属性的对象放到此次遍历的alikeArr中,
// 将其他的对象放入到tempArr中,等待下次遍历
initialArr.forEach((val, key) => {
if (val[`${name}`] === propertyName) {
alikeArr.push(val)
} else {
tempArr.push(val)
}
})
newArr.push(alikeArr)
initialArr = tempArr
return formateArrData(initialArr, name, newArr)
} else {
return newArr
}
}
console.log(formateArrData(tempArr, '', newArrA))
实现效果:
上一篇: java 一般数组的概念和使用1