上週在作項目的時候,遇到一個包含了若干對象的數組,項目須要將這些對象根據某個屬性分爲若干個數組。個人思路原來是這樣的: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); //輸出分組以後的對象