需求:將下面數組-對象中的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
}
}
實現效果: