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);