对象搜索算法挑战

这道题主要还是考我们对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:

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty

下面是具体的代码:

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 });                                                                                                                                                                                                                                                                                                                                                                                                                    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值