2014-10-28 97 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); 
相关问题