將一個存放了若干個對象的數組按照對象的某個屬性值進行分組

上週在作項目的時候,遇到一個包含了若干對象的數組,項目須要將這些對象根據某個屬性分爲若干個數組。個人思路原來是這樣的:javascript

把須要分組的屬性取出來放入一個新建的數組,而後根據這個數組循環去找大型數組中的屬性,若是數組中的屬性在這個新數組中已經存在,說明已經有了這個分組了,將這個對象放入相應的分組便可,若是新數組中不存在這個對象的屬性值,說明是一個新的對象,那麼將他的屬性值放入新建的數組中,而後再爲它創建一個新的分組,將這個對象存入分組;java

多是技術水平過低了,在代碼編寫的過程當中遇到了些問題:數組

在新的數組中不存在這個對象的屬性值時須要創建一個新的數組,而後,我在定義新的數組時遇到了困難,我不知道該怎麼命名新的數組了,若是我是用同一個名字,那麼後面創建的數組就會把前面創建的數組給覆蓋掉,後來在同事的幫助下,纔算完成了這個分組任務;rest

解決的方法是:使用用來存放屬性值的數組的長度來區別命名新生成的分組。完整代碼以下:code

var proList = [];  //建立一個新數組,用來存放找到的屬性值
var restObj = {};  //建立一個對象,用來存放分組的對象
for(var i = 0; i < arrList.length;i++){
  if(proList.indexOf(arrList[i].objName == -1){
    //在proList中不存在該對象那個的屬性值,那麼將該屬性值存入proList,同時建立一個新的分組
    proList.push(arrList[i].objName);
    var restObj["arr"+proList.length] = [];
    restObj["arr"+proList.length].push(arrList[i]);
  }else{
    //在proList中存在該對象的屬性值,說明該對象的屬性值已經創建過度組,將該對象放入對應的分組便可
    restObj["arr"+(proList.indexOf(arrList[i].objName)+1)].push(arrList[i]);
  };
};
console.log(restObj); //輸出分組以後的對象
相關文章
相關標籤/搜索