ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

js根据相同属性值将一个一维对象数组转为二维数组

2021-01-19 13:35:04  阅读:304  来源: 互联网

标签:arr code 数组 js item map1 一维 datas



将一个一维对象数组,根据相同的属性值,转化成一个二维数组 

 

// 待转换的一维数组
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

标签:arr,code,数组,js,item,map1,一维,datas
来源: https://www.cnblogs.com/ygyy/p/14297432.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有