我有两个对象数组:
var arOne = [
{key: 'alpha', value: 5},
{key: 'beta', value: 11},
{key: 'gamma', value: 15},
{key: 'delta', value: 12},
{key: 'epsilon', value: 55}
{key: 'pony', value: 101}
]
var arTwo = [
{key: 'alpha', value: 5.5},
{key: 'beta', value: 11.5},
{key: 'gamma', value: 15.5},
{key: 'psi', value: 12.5},
{key: 'omega', value: 55.5}
]
我需要将值合并到一个数组中。
键匹配的情况:用键创建一个数组,并将值从
arTwo
追加到arOne
。密钥不匹配的情况:如果密钥存在于
arOne
中,则包括arOne
中的值和arTwo
中的0。如果密钥存在于arTwo
中,则为arOne
加上0,并为arTwo
加上值。请注意,
arOne
和arTwo
的大小可能不同(请参阅pony
中的arOne
键)。结果如下所示:
var result = [
['alpha', 5, 5.5],
['beta', 11, 11.5],
['gamma', 15, 15.5],
['delta', 12, 0],
['epsilon', 55, 0],
['pony', 101, 0],
['psi', 0, 12.5],
['omega', 0, 55.5],
]
我整天都在盯着我,摸索着所有尝试。有什么想法吗?
最佳答案
function combine(obj1, obj2){
var arr = [], k, i;
for (k = 0; k < obj1.length; ++k){
arr.push([obj1[k].key, obj1[k].value]);
}
for (k = 0; k < obj2.length; ++k){
var exists = false;
for (i = 0; i < arr.length; ++i){
if(arr[i][0] === obj2[k].key){
arr[i].push(obj2[k].value);
var exists = true;
break;
}
}
if (!exists){
arr.push([obj2[k].key, 0, obj2[k].value]);
}
}
for (i = 0; i < arr.length; ++i){
if (arr[i].length === 2){
arr[i].push(0);
}
}
return arr;
}
致电方式:
var myNewArray = combine(arOne, arTwo);