a=['a','b','c']
b=['a','c']
我试图编写一个比较这两个数组的函数,并创建第三个数组,用null填充缺少的数组成员。所以返回值应为:
['a',null,'c']
我该怎么做?
P.S。值始终按顺序排列。
我不是在这里分享我的尝试,因为我不希望它被改进或批评,我知道这个功能不是很难写(但它适合我)所以我只想要有经验的人的答案
答案 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
查找。
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;