js如何将一维数组变成多维数组

前言

在编程的大多数情况下我们的需求都是将数组扁平化进行降维,但是确实有那么些情况是要我们将数组进行在分类,从而要升维的。比如,我们获取了联系人数据,但是我们需要将联系人按照字母进行分组。针对联系人的例子,我们来实地演习下如何升维数组。

例子

比如我们有如下数据,我们需要将下列数组中以id中的首字母进行分类

[
    {"fristCap":"A","id":"Anni","contact":"112123","value":"111"},
    {"fristCap":"A","id":"Aidai","contact":"22222","value":"11111"},
    {"fristCap":"B","id":"Bobo","contact":"22222","value":"25462"},
    {"fristCap":"B","id":"Big","contact":"2222221","value":"23131"},
    {"fristCap":"C","id":"Ca","contact":"322222","value":"2315432"},
]

也就是转换成下面这个样子:

[
    {
        '"firstCap":"A"
        "data": [
            {"fristCap":"A","id": "Anni", "contact": "112123", "value": "111"},
            { "fristCap":"A","id": "Aidai", "contact": "22222", "value": "11111"}
        ]
    },
    {
        "firstCap": "B",
        "data": [
            {"fristCap":"B", "id": "Bobo",  "contact": "22222", "value": "25462" },
            { "fristCap":"B","id": "Big", "contact": "2222221", "value": "23131"},
        ]
    },
    {
        "firstCap": "C",
        "data": [
            {"fristCap":"C","id": "Ca", "contact": "322222", "value": "333333" }
        ]
    }
]

做法

观察上面需要转换的数据格式,我们的思路是这样子的,
1、创建一个新的数组,用来返回归类好的数据;
2,创建一个对象,用来标记首字母,该对象要有一个标记首字母的字段firstCap,还要有一个data字段用来接纳相同首字母的数据。
3,将新建的数组用字母升序的方式重新排列

let tempArray = [];//创建一个新数组
let hash = {};
for (let contact of this.contacts) {
    if(!hash[contact.firstCap]) {
         tempArray.push({firstCap:contact.firstCap,data:[contact]});
         hash[contact.firstCap] = contact;
     } else {
          for(let newContact of tempArray) {
               if (newContact.firstCap === contact.firstCap) {
                     newContact.data.push(contact);
                      break;
                }
           }
      }
  }

你可能感兴趣的:(js如何将一维数组变成多维数组)