js根據相同屬性值將一個一維物件陣列轉為二維陣列
阿新 • • 發佈:2021-01-19
將一個一維物件陣列,根據相同的屬性值,轉化成一個二維陣列
如
// 待轉換的一維陣列
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 | 可選。傳遞給函式的初始值 |