比如
var aa={a:1,b:1}
var bb=[{a:1,b:1,c:1},{a:2,b:2,,c:1},{a:3,b:3,c:1}]
结果
console.log({a:1,b:1,c:1})
怎么通过aa给的条件查找到bb里的第一个
比如
var aa={a:1,b:1}
var bb=[{a:1,b:1,c:1},{a:2,b:2,,c:1},{a:3,b:3,c:1}]
结果
console.log({a:1,b:1,c:1})
怎么通过aa给的条件查找到bb里的第一个
var aa={a:1,b:1}
var bb=[{a:1,b:1,c:1},{a:2,b:2,c:1},{a:3,b:3,c:1}]
function search(data, condition){
var matchIndexs = [];
for(var i=0; i<data.length; i++){
var item = data[i];
var isMatch = true;
for(var key in condition){
if(condition[key] !== item[key]){
isMatch = false;
break;
}
}
if(isMatch){
matchIndexs.push(i);
}
}
return matchIndexs;
}
var result = search(bb,aa);
console.log(result);
可以用ES5的Array.prototype.filter()方法,遍历给定数组,筛选出符合条件的元素
var aa={a:1,b:1}
var bb=[{a:1,b:1,c:1},{a:2,b:2,c:1},{a:3,b:3,c:1}]
// callback
// 用来测试数组的每个元素的函数。调用时使用参数 (element, index, array)。
// 返回true表示保留该元素(通过测试),false则不保留。
function callback(element) {
return element.a === aa.a && element.b === aa.b
}
//ES5 Array.prototype.filter()方法,遍历给定数组,筛选出符合条件的元素
bb.filter(callback)
不需要引入库,也不需要重新写,原生自带
//获取aa的key
var _key= Object.keys(aa) //[a,b]
bb.filter(item=>_key.every(k=>aa[k]===item[k]))
//这里分几步简单说明一下
//bb.filter遍历bb的每一项(item),如果_key.every(k=>aa[k]===item[k])返回true就添加,否则过滤掉。最后返回一个数组
//_key.every(k=>aa[k]===item[k]) 这里是遍历_key,利用every方法判断,aa给出的条件(属性)和bb的当前遍历的项(item)的这些属性,是不是都相等。都相等返回true,否则返回false。
//最后bb.filter 根据上一步返回结果进行过滤 如果_key.every(k=>aa[k]===item[k])返回true就添加,否则过滤掉。最后返回一个数组
运行结果
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
用 Lodash 就比较简洁了