这道题主要还是考我们对js中属性的运用
主要了解三点:
1.循环遍历属性:for.....in
如本题中的
for(var p in source){
shuxing.push(p);
}
p可以获得source中的属性,并且存入到shuxing数组里
2.获得属性名字后访问属性的值是“[]”
我们想访问collection[j]中属性名为shuxing[i]的属性值不是用“.”
正确的访问方法:collection[j][shuxing[i]]
3.使用hasOwnProperty()判断是否包含这个属性,返回一个布尔值
具体用法可以查看MDN:
下面是具体的代码:
function where(collection, source) {
var arr = [];
// What's in a name?
//console.log(collection);
//console.log(source);
//首先获得source中属性的长度
var shuxing=[];
for(var p in source){
shuxing.push(p);
}
//将source中的属性和collection中的属性一一比较,collection中的属性全部满足source中的属性后再存入
for(var j=0;j<collection.length;j++){
var count=0;
for(var i=0;i<shuxing.length;i++){
// 如果他拥有这个属性值,并且属性值相等标记变量+1
if(collection[j].hasOwnProperty(shuxing[i])&&collection[j][shuxing[i]]==source[shuxing[i]]){
count++;
}
}
// collection[j]中含有全部source中全部属性并且属性值相等的情况下存入
if(count==shuxing.length){
arr.push(collection[j]);
}
}
console.log(arr);
return arr;
}
where([{ "a": 1, "b": 2 }, { "a": 1 }, { "a": 1, "b": 2, "c": 2 }], { "a": 1, "b": 2 });