使用js,根據數組中對象屬性值的不同將數組進行分組-1

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

實現效果:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章