2017-04-07 207 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 
相关问题