2014-10-28 99 views
4

我知道這個工作(返回true)檢查如果一個數組是另一個數組的一個子集(但檢查對一個屬性)

var arr1 = [1, 'a', 2, 'b', 3]; 
var arr2 = [1, 2, 3]; 

var isSuperset = arr2.every(function (val) { return arr1.indexOf(val) >= 0; }); 

但是說array1中包括的對象,我想檢查數組2對抗對象的某些屬性:

var object1 = {name:'one'} 
var object2 = {name:'two'} 
var object3 = {name:'three'} 

var arr1 = [object1,object2,object3]; 
var arr2 = ['one','two']; 
var isSuperset = arr2.every(function (val) { return arr1.indexOf(val) >= 0; }); 

如何確保每個函數都檢查名稱屬性?

+3

'變種ARR3 = arr1.map(函數(VAL){返回val.name;})'和在arr2.every'的'的predicte,使用'返回arr3.indexOf(VAL)> = 0 ;'。 – 2014-10-28 22:38:23

+0

哦,你是更快,同樣的解決方案,upvote – sjkm 2014-10-28 22:41:09

回答

7
var object1 = {name: 'one'}; 
var object2 = {name: 'two'}; 
var object3 = {name: 'three'}; 

var arr1 = [object1,object2,object3]; 
var arr2 = ['one','two']; 

// solution 
var names = arr1.map(function(obj) { 
    return obj.name; 
}); 

var isSuperset = arr2.every(function(val) { 
    return names.indexOf(val) >= 0; 
}); 

alert(isSuperset); 
相關問題