a=['a','b','c']
b=['a','c']
我試圖寫一個函數來比較這兩個數組,並創建第三個數組填充缺少的數組成員。所以返回值應該是:比較和填充陣列 - JS
['a',null,'c']
我該怎麼做?
P.S.值總是按順序排列。
我不會在這裏分享我的嘗試,因爲我不希望它被改進或批評,我知道這個函數不是很難寫(但它是爲我),所以我只想要有經驗的人的答案。
a=['a','b','c']
b=['a','c']
我試圖寫一個函數來比較這兩個數組,並創建第三個數組填充缺少的數組成員。所以返回值應該是:比較和填充陣列 - JS
['a',null,'c']
我該怎麼做?
P.S.值總是按順序排列。
我不會在這裏分享我的嘗試,因爲我不希望它被改進或批評,我知道這個函數不是很難寫(但它是爲我),所以我只想要有經驗的人的答案。
的功能,但不一定是最有效的解決辦法:
var results = a.map(function(v) {
return b.indexOf(v) !== -1 ? v : null;
});
當值總是連續的,它可能是更有效的循環在每個數組中都有一個索引,只有在找到匹配項時纔將索引向前移動。無論你真的想要做這個優化,取決於你的數組有多大。
如果數組是['a','b','a']和'['a','b']'' – fuyushimoya
這可能會失敗從這個問題很難說,如果這是預期的行爲與否。 – nils
沒有足夠的上下文來確定有效的輸入數組應該是什麼,所以我只是認爲我會使用給出的示例。 –
請嘗試以下代碼,
var result = [];
a.forEach(function(item){
result.push(b.indexOf(item) < 0 ? null : item);
})
您可以使用Array.prototype.map函數遍歷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
至少包含所有b
包含值的工作。
與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>');
非常感謝,今天我需要一個像這樣的替代解決方案。 –
的順序是數組值始終? –
@DominicTobias是 –
_I正試圖...._我看不到你試過的東西。 – fuyushimoya