2013-01-02 14 views
25

Bu tür bir mantığı sağlamak için en iyi (en temiz) yol nedir?Bir dizinin diğerinin alt kümesi olup olmadığını nasıl sınayabilirim?

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 

underscore.js mu?

_(hand).difference(colors).length === 0 
+4

... ... ... Ne? – Shmiddty

+0

Olası kopya: http://stackoverflow.com/q/3115982/561731 – Neal

+3

Verilen dizinin içinde yalnızca "colors" dizisinin öğeleri olup olmadığını belirlemeye çalışıyor gibi görünüyor. – MrZander

cevap

36

benzersizdir dizideki her öğeyi varsayarsak: iki dizide kesiştiği uzunluğuyla hand uzunluğunu karşılaştırın

+0

Teşekkürler, altyazı dokümanlarmı kaç kez okursam da, onlara ihtiyaç duyduğumda bu çözümleri nadiren düşünebilirim. – ThomasReggi

+1

, malıların benzersiz olmadığını ve siparişi kontrol etmek isterseniz de işe yaramadığını söylerseniz, şunları yazdım: https://gist.github.com/timaschew/891632094c8bfcb73c38 – timaschew

+0

_.difference (subset, superset) .length === 0 –

17

Belki difference aradığınız budur. Aynıysa, hand'daki tüm öğeler de colors'dadır.

var result = (hand.length === _.intersection(hand, colors).length); 

DEMO

+2

'_ (el) .difference (renkler) .length === 0; ': http://jsfiddle.net/GXGun/1/ (bunun tersi var;) olmalıdır. Güzel çözüm olsa! –

+1

@FelixKling teşekkürler! Sabit :) –

+0

'dönüş! _ (El) .farklılık (renkler) .length' –

İlgili konular