1. 程式人生 > 實用技巧 >js根據相同屬性值將一個一維物件陣列轉為二維陣列

js根據相同屬性值將一個一維物件陣列轉為二維陣列


將一個一維物件陣列,根據相同的屬性值,轉化成一個二維陣列

// 待轉換的一維陣列
var arrayFirst = [{
    code: 1,
    datas: 'a網咖'
},
{
    code: 1,
    datas: 'b網咖'
}, {
    code: 2,
    datas: 'a酒店'
},
{
    code: 2,
    datas: 'b酒店'
},
{
    code: 3,
    datas: 'a學校'
}, {
    code: 3,
    datas: 'b學校'
},
{
    code: 3,
    datas: 'c學校'
}
]

按照相同的code值轉換成二維陣列

// 轉換後的二維陣列
[
[{code: 1, datas: "a網咖"},{code: 1, datas: "b網咖"}],
[{code: 2, datas: "a酒店"},{code: 2, datas: "b酒店"}], 
[{code: 3, datas: "a學校"},{code: 3, datas: "b學校"},{code: 3, datas: "c學校"}]]

es6的方法

使用es6的方法
Object.values() //返回 值 陣列
返回陣列,成員是引數物件自身的(不含繼承的)所有可遍歷(enumerable)屬性的鍵值

// 轉換後的二維陣列
var arrayTwo = Object.values(arrayFirst.reduce((res, item) => {
  res[item.code] ? res[item.code].push(item) : res[item.code] = [item];
  return res;
}, {}));
console.log(arrayTwo)

第二種方法

// 轉換後的二維陣列
function convert (arr) {
    var map1 = {};
    while(arr.length) {
        let current = arr.pop(); // 會影響原陣列
        map1[current.code] = map1[current.code] || [];
        map1[current.code].push(current);
    }
    
    return Object.keys(map1).map(key => map1[key]);
}
var arrayTwo = convert(arrayFirst)
console.log(arrayTwo)

順便介紹一下reduce 方法 :

array.reduce(function(total, currentValue, currentIndex, arr), initialValue)

reduce() 方法接收一個函式作為累加器,陣列中的每個值(從左到右)開始縮減,最終計算為一個值。
reduce() 對於空陣列是不會執行回撥函式的

引數描述
total 必需。初始值, 或者計算結束後的返回值。
currentValue 必需。當前元素
currentIndex 可選。當前元素的索引
arr 可選。當前元素所屬的陣列物件
initialValue 可選。傳遞給函式的初始值
轉:https://blog.csdn.net/qq_39840470/article/details/88184538