例如:where([{ "a": 1, "b": 2 }, { "a": 1 }, { "a": 1, "b": 2, "c": 2 }], { "a": 1, "b": 2 });
最终会返回[ { a: 1, b: 2 }, { a: 1, b: 2, c: 2 } ]
,因为以上两个属性中都含有“{ "a": 1, "b": 2 }
”这两个属性值对。
function where(collection, source) {
//collection代表被测试的对象数组,source为被测试的属性值对(or对象)。
//使用Object.keys()方法获取这个对象的所有属性,并返回为一个数组。
var sourceKeys = Object.keys(source);
//使用filter()方法过滤出符合条件的数组对象。
return collection.filter(function(obj){
//遍历source的所有属性
for(var i=0;i<sourceKeys.length;i++){
//如果obj中不存在那些属性,或属性不匹配,则返回false,即为不符合条件。
if(!obj.hasOwnProperty(sourceKeys[i]) || obj[sourceKeys[i]]!==source[sourceKeys[i]]){
return false;
}
}
return true;
});
}
THE END.
网友评论