需求:将下面数组-对象中的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: '递归' }
]
解决办法1:
const formateArrData1 = (initialArr, name, newArr) => {
// newArr是承接分类的新数组,整个initialArr处理完成之后,会根据不同的name生成一个二维数组
// 判定传参是否符合规则
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 formateArrData1(initialArr, name, newArr)
} else {
return newArr
}
}
实现效果: