比较和填充数组 - JS

时间:2015-11-07 20:11:17

标签: javascript arrays

a=['a','b','c']
b=['a','c']

我试图编写一个比较这两个数组的函数,并创建第三个数组,用null填充缺少的数组成员。所以返回值应为:

['a',null,'c']

我该怎么做?

P.S。值始终按顺序排列。

我不是在这里分享我的尝试,因为我不希望它被改进或批评,我知道这个功能不是很难写(但它适合我)所以我只想要有经验的人的答案

4 个答案:

答案 0 :(得分:2)

您可以使用Array.prototype.map函数循环遍历remote: true数组并替换值。

a

提示:仅当var a = ['a','b','c']; var b = ['a','c']; var c = a.map(function(item) { return ~b.indexOf(item) ? item : null; }); console.log(c); 至少包含a包含的所有值时才有效。

答案 1 :(得分:1)

请尝试以下代码,

var result = [];
a.forEach(function(item){
  result.push(b.indexOf(item) < 0 ? null : item);
})

答案 2 :(得分:1)

功能性但不一定是最有效的解决方案:

var results = a.map(function(v) {
    return b.indexOf(v) !== -1 ? v : null;
});

由于值始终是顺序的,因此在每个数组中循环索引可能更有效,只有在找到匹配时才将索引向前移动到b。您是否真的希望将此作为优化取决于数组的大小。

答案 3 :(得分:1)

稍微不同的方法,不使用indexOf查找。

&#13;
&#13;
var a = ['a', 'b', 'a'],
    b = ['a', 'b'],
    c = a.map(function () {
        var offset = 0;
        return function (el, i) {
            if (el === b[offset + i]) {
                return el;
            }
            offset--;
            return null;
        }
    }());
document.write('<pre>' + JSON.stringify(c, 0, 4) + '</pre>');
&#13;
&#13;
&#13;