我有两个对象数组:

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加上值。

请注意,arOnearTwo的大小可能不同(请参阅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);

09-20 20:56