关于接口返回数据需要合并处理的思考

1、今天有个小伙伴问我后台返回一个data,需要将数组的每一项合并成一个新的数组。

data=[[4, 8, 10, 3, 6778129614750487000], [3, 7, 7, 6, 6777475710194946000]]

需要换成

data=[[4, 3],[8, 7],[10, 7],[3, 6],[6778129614750487000, 6777475710194946000]]

代码实现如下

var data = [[4, 8, 10, 3, 6778129614750487000], [3, 7, 7, 6, 6777475710194946000]];



var arr=[];

for (var i = 0; i < data.length; i++) {

    for (var j = 0; j < data[i].length; j++) {

      i===0? arr.push([]):'';

      arr[j].push(data[i][j]);

    }

}

2、如果是以相同的key作为一个数组该怎么做呢?

//对name相同的合并到一个数组

var data = [{

    name: "张三",

    word: "教师",

    age: "20"

},

{

    name: "李四",

    word: "IT",

    age: "21"

},

{

    name: "小红",

    word: "医生",

    age: "50"

},

{

    name: "张三",

    work: "销售",

    age: "23"

}];





//实现结果

var data = [

    {

        name: "张三",

        arr: [{

                name: "张三",

                word: "教师",

                age: "20"

            },

            {

                name: "张三",

                work: "销售",

                age: "23"

            }

        ]

    },

    {

        name: "李四"

        arr: [{

            name: "李四",

            word: "IT",

            age: "21"

        }]





    },

    {

        name: "小红"

        arr: [{

            name: "小红",

            word: "医生",

            age: "25"

        }]

    }

];

// 实现方法:

// 1、循环data数据,先将相同key都放一个tempData,判断tempData是否重复key,不重复则放入tempData,和newData。

// 2、如果重复则循环newData里面的key是否和现在的key相等,如果相等newData里面的数组放入当前的值。


var newData=[];

var tempData=[];

for (var i = 0; i < data.length; i++) {

  if (tempData.indexOf(data[i].name) === -1) {

     newData.push({name:data[i].name,arr:[data[i]]})

     tempData.push(data[i].name);

  } else {

      for (var j = 0; j < newData.length; j++) {

          if (newData[j].name == data[i].name) {

              newData[j].arr.push(data[i]);

              break;

          }

      }

  }

}





// 循环将data,判断对象有没有这个value,没有这个value添加到对象中,有的话添加到对象的arr中。最后再将所有的value值返回出来,组成一个数组。


var newData = {};

data.forEach((item, index) => {

  var { name } = item;

  if (!newData[name]) {

    newData[name] = {

      name,      

      arr: []

    }

  }

  newData[name].arr.push(item);

});

var list = Object.values(newData); 


 

3、如果是两个数组以key相同的数组,合并成一个

 

//原数组

var arr1 = [{ id: 1, age: '14' },{ id: 2, age: '23' },{ id: 3, age: '33' }]

var arr2 = [{ id: 3, name: '张三' },{ id: 1, name: '李四' },{ id: 2, name: '王五' }]

//处理成

[{id: 1, age: "14", name: "李四"},{id: 2, age: "23", name: "王五"},{id: 3, age: "33", name: "张三"}]







// 方法一

var newData = [];

for(let item of arr1) {

  var temp = arr2.filter(i => i.id === item.id)[0];

  newData.push({...item, ...temp});

}









// 方法二

arr1.map(function(val) {

    arr2.map(function(val2){

        if(val.id===val2.id){

            return Object.assign(val,val2);

        }

    })

});





// 方法三

var list = arr2.reduce((prev, cur) => {

  var target = prev.find(e => e.id === cur.id);

  if (target) {

    Object.assign(target, cur);

  } else {

    prev.push(cur);

  }

  return prev;

}, arr1);

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值