![](/img/trans.png)
[英]How to merge two objects (associative array) with same key into one object
[英]How to make one array of object from two array of objects with one shared key - JavaScript
我必须合并来自其余api调用的2个对象数组。 它们就像: [{date: date, name: name}, ...]
让我们称它们为A数组和B数组。
如果A数组和B数组中的日期相同,则最终array-s对象应如下所示: [{date: date, nameA: nameA, nameB: nameB}]
如果他们不这样做,只需插入insert和对象,如下所示: [{date: dateA, nameA: nameA}]
例如:
arrayA = [
{
date: 2017-01-01,
name: 'New Year Eve'}
},
{
date: 2017-02-02,
name: 'feb2'
}
]
arrayB = [
{
date: 2017-01-01,
name: 'New Year Eve'}
},
{
date: 2017-03-03,
name: 'march3'
}
]
最终数组应如下所示:
finalArray = [{
date: 2017 - 01 - 01,
nameA: 'New Year Eve',
nameB: 'New Year Eve'
},
{
date: 2017 - 02 - 02,
nameA: 'feb2'
},
{
date: 2017 - 03 - 03,
nameB: 'march3'
}
]
和具有共享日期的对象可以在数组中的不同位置,所以我不能像
arrayA[0].date === arrayB[0].date
var finalArr = [];
for (var i = 0; i < arrayA.length; i++) {
for (var j = 0; j < arrayB.length; j++) {
if (arrayA[i].date == arrayB[j].date) {
//add to the final array if not exist that date
}
}
}
有一个叫做Array.prototype.concat()
东西,它用于合并2个或更多的数组,在您的示例中是这样的:
finalArray = arrayA.concat(arrayB)
然后,您必须遍历finalArray
,在获取其属性后删除任何重复的日期,然后合并到相同的日期,如下所示:
for (var i = 0; i < finalArray.length; i++) {
if (finalArray[i]["date"] === finalArray[i+1]["date"] ) {
finalArray[i]["nameA"] = finalArray[i]["name"];
finalArray[i]["nameB"] = finalArray[i+1]["name"];
//delete the one that is repeated
delete finalArray[i+1][key]
}
}
希望能奏效
您可以使用哈希表来引用具有相同日期的对象。
var arrayA = [{ date: '2017-01-01', name: 'New Year Eve' }, { date: '2017-02-02', name: 'feb2' }], arrayB = [{ date: '2017-01-01', name: 'New Year Eve' }, { date: '2017-03-03', name: 'march3' }], merged = function merge(arrays, names) { var hash = Object.create(null), result = []; arrays.forEach(function (a, i) { a.forEach(function (b) { if (!hash[b.date]) { hash[b.date] = { date: b.date }; result.push(hash[b.date]); } hash[b.date][names[i]] = b.name; }); }); return result; }([arrayA, arrayB], ['nameA', 'nameB']); console.log(merged);
.as-console-wrapper { max-height: 100% !important; top: 0; }
您可以使用数组减去长度
var arrayA = [{date: '2017-01-01', name: 'New Year Eve'},{date: '2017-02-02', name: 'feb2'}];var arrayB = [{date: '2017-01-01', name: 'New Year Eve'},{date: '2017-03-03',name: 'march3'}]; var arr= Array.from(new Array(arrayA.length+arrayB.length),(x,y)=> arrayB[y]||arrayA[y-arrayA.length] ); console.log(arr);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.