2017-04-07 121 views
1

請參閱以下數組。Javascript檢查數組是否包含另一個數組的所有內容

arrayOne = ["a", "b", "c", "d"]; 

arrayTwo = ["a", "b", "c", "d", "e", "f", "g"]; 

arrayThree = ["a", "b", "d", "g", "i"] 

假設我想確保在arrayOne每個字符串,它是目前我太匹配它的另一陣列英寸

舉一個真實的例子,我想確保我已經完成了我的購物清單,所以我拿出我的購物清單,看看我的購物清單中的每件商品都出現在購物車中。我的購物車中可能還有更多商品在購物清單中,但只要每件商品都在我身邊,我就會很好。

返回JavaScript,比較arrayTwo和arrayOne會返回true,因爲a,b,c和d都存在,而比較arrayThree和arrayOne則返回false,因爲c不存在。

我知道這可以用indexof for循環來實現,但有沒有更好的方法來做到這一點?

+5

'subset.every(x => set.includes(x))' – georg

回答

3

您可以使用Javascript array.prototype.every() method這樣的:

arrayOne = ["a", "b", "c", "d"]; 
 
arrayTwo = ["a", "b", "c", "d", "e", "f", "g"]; 
 
arrayThree = ["a", "b", "d", "g", "i"] 
 

 
var containsAllElements = arrayOne.every(function(item) { 
 
    return arrayTwo.indexOf(item) > -1; 
 
}); 
 

 
console.log(containsAllElements);

+0

比我的答案好,工作不錯! –

+0

@AhmedMusallam是的,我們應該總是從JS預定義的方法中獲益,請注意我們可以使用'includes()'來優化我的代碼,就像評論中所建議的一樣。 –

+1

是的,但包括需要一個填充爲IE :) –

0

試試這個:

arrayOne = ["a", "b", "c", "d"]; 
arrayTwo = ["a", "b", "c", "d", "e", "f", "g"]; 
arrayThree = ["a", "b", "d", "g", "i"] 

Array.prototype.containsArray = function(arr){ 
    var result = true; 
    var self = this; 
    arr.forEach(function(item){ 
    if(self.indexOf(item) === -1){result = false} 
    }) 
    return result; 
} 
arrayTwo.containsArray(arrayOne); // true 
arrayThree.containsArray(arrayOne); // fasle 

更新:使用Array.prototype.every:感謝@chsdk

arrayOne = ["a", "b", "c", "d"]; 
arrayTwo = ["a", "b", "c", "d", "e", "f", "g"]; 
arrayThree = ["a", "b", "d", "g", "i"] 
Array.prototype.containsArray = function(arr){ 
    var self = this; 
    return arr.every(function(item){ 
     return self.indexOf(item) > -1; 
    }); 
} 
var one = arrayTwo.containsArray(arrayOne); // true 
var two = arrayThree.containsArray(arrayOne); // fasle 
相關問題