如何测试一个数组是否是另一个数组的子集?

Tho*_*ggi 32 javascript underscore.js

提供这种逻辑的最好(最干净)方法是什么?

var colors = ["red","white","blue"];

logic(colors,["red","green"]); //false
logic(colors,["red"]); //true
logic(colors,["red","purple"]); //false
logic(colors,["red","white"]); //true
logic(colors,["red","white","blue"]); //true
logic(colors,["red","white","blue","green"]); //false
logic(colors,["orange"]); //false
Run Code Online (Sandbox Code Playgroud)

可能使用underscore.js

Fel*_*ing 40

假设数组中的每个元素都是唯一的:将长度hand与两个数组的交集长度进行比较.如果它们相同,则所有元素hand也在colors.

var result = (hand.length === _.intersection(hand, colors).length);
Run Code Online (Sandbox Code Playgroud)

DEMO

  • 正如您所说,如果元素不是唯一的,则不起作用;如果您要检查顺序,它也将不起作用:我创建了要点以解决这些需求:https://gist.github.com/timaschew/ 891632094c8bfcb73c38 (2认同)
  • _.difference(subset,superset).length === 0 (2认同)

Ser*_*kiy 19

也许差异就是你要找的东西:

_(hand).difference(colors).length === 0
Run Code Online (Sandbox Code Playgroud)

  • 它应该是`_(hand).difference(colors).length === 0;`:http://jsfiddle.net/GXGun/1/(你得到它反之亦然;)).不错的解决方案! (2认同)