Dojo mixin两个Arrays怎么样?

时间:2017-03-01 17:13:34

标签: javascript arrays dojo

我有以下情况:

我有一个像这样的变量数组:

[
    {
        id: "foo",
        value: "bar"
    },
    {
        id: "baz",
        value: "buz"
    }
]

我有一个像这样的默认数组:

[
    {
        id: "foo",
        value: "default"
    },
    {
        id: "bar",
        value: "default"
    },
    {
        id: "baz",
        value: "default"
    }
]

我想比较这两个数组,并将缺少的默认值添加到第一个数组中。

这就是我想要的输出:

[
    {
        id: "foo",
        value: "bar"  // keep unchanged because it was already there
    },
    {
        id: "bar",
        value: "default"   // use the default because it was not in there
    },
    {
        id: "baz",
        value: "buz"   // also keep because it was already in the first array
    }
]

实现这一目标的最好方法是什么?谢谢你的帮助!

2 个答案:

答案 0 :(得分:2)

如何解决这个问题的方法之一就是从条目中过滤第二个数组,使其与第一个数组中的var arr1=[{id:"foo",value:"bar"},{id:"baz",value:"buz"}], arr2=[{id:"foo",value:"default"},{id:"bar",value:"default"},{id:"baz",value:"default"}]; var arr3 = arr2.filter(v => arr1.every(c => c.id != v.id)); console.log([...arr1, ...arr3]);相同,并将其连接到一个对象数组中。



{{1}}




答案 1 :(得分:0)

嗯,直接使用dojo - lang.mixin是不可能的。因为mixin基本上处理json对象而不是对象数组(在你的情况下)。

解决方案 - 我刚刚编写了一个JavaScript函数,它会返回合并后的数组。

var baseArray = [{
            id: "foo",
            value: "bar"
        },
        {
            id: "baz",
            value: "buz"
        },
        {
            key: "key",
            value: "value"
        }
    ];

    var defaultArray = [{
            id: "foo",
            value: "default"
        },
        {
            id: "bar",
            value: "default"
        },
        {
            id: "baz",
            value: "default"
        }
    ];

var result = _mixinArrays(baseArray , defaultArray );
console.log(result);

function _mixinArrays(a, b){
    for (var i = 0; i < b.length; i++) {
        var matched = false;
        for (var j = 0; j < a.length; j++) {
            if (b[i].id == a[j].id) {               
                matched = true;
            }
        }
        if (!matched) {
            a.push(b[i]);
        }
    }
    return a;
}

希望这会对你有所帮助:)。