2015-11-07 46 views
0
a=['a','b','c'] 
b=['a','c'] 

我試圖寫一個函數來比較這兩個數組,並創建第三個數組填充缺少的數組成員。所以返回值應該是:比較和填充陣列 - JS

['a',null,'c'] 

我該怎麼做?

P.S.值總是按順序排列。

我不會在這裏分享我的嘗試,因爲我不希望它被改進或批評,我知道這個函數不是很難寫(但它是爲我),所以我只想要有經驗的人的答案。

+0

的順序是數組值始終? –

+0

@DominicTobias是 –

+0

_I正試圖...._我看不到你試過的東西。 – fuyushimoya

回答

1

的功能,但不一定是最有效的解決辦法:

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

當值總是連續的,它可能是更有效的循環在每個數組中都有一個索引,只有在找到匹配項時纔將索引向前移動。無論你真的想要做這個優化,取決於你的數組有多大。

+0

如果數組是['a','b','a']和'['a','b']'' – fuyushimoya

+0

這可能會失敗從這個問題很難說,如果這是預期的行爲與否。 – nils

+0

沒有足夠的上下文來確定有效的輸入數組應該是什麼,所以我只是認爲我會使用給出的示例。 –

1

請嘗試以下代碼,

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

您可以使用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包含值的工作。

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>');

+0

非常感謝,今天我需要一個像這樣的替代解決方案。 –