创建一个查看列表(第一个参数)并返回的函数 具有等效属性值的所有对象的数组(第二个 参数)。
但如果我的生活依赖于它,我似乎无法通过一系列对象循环.....这是我的以下代码
function where(collection, source) {
for(var prop in collection){
if(collection.hasOwnProperty(prop)){
console.log("collection." + prop + "=" + collection[prop]);
}
}
}
where([{ first: 'Romeo', last: 'Montague' }, { first: 'Mercutio', last: null }, { first: 'Tybalt', last: 'Capulet' }], { last: 'Capulet' });
我正在阅读有关hasOwnProperty方法和for循环的文档,但似乎我正在使用它们错误,任何指导都表示赞赏,谢谢。
这不是重复
答案 0 :(得分:1)
The for...in
loop is not what you want for iterating over arrays in javascript
使用sequential for循环遍历数组,并使用for..in
循环迭代对象的键...
for(var i=0; i<collections.length; i+=1) {
for(var prop in collections[i]){
if(collections[i].hasOwnProperty(prop)){
console.log("collection." + prop + "=" + collections[i][prop]);
}
}
}
答案 1 :(得分:1)
可以使用filter
方法过滤掉满足条件的元素。此外,由于在评估条件时需要比较对象,并且JavaScript for Objects中似乎没有equals
方法,因此必须执行额外的工作来检查相等性。
这是解决问题的一种方法可以解决
function where(collection, source) {
return collection.filter(function(item) {
return Object.keys(source).every(function(k){ return item[k] == source[k] });
});
}
console.log (where([{ first: 'Romeo', last: 'Montague' }, { first: 'Mercutio', last: null }, { first: 'Tybalt', last: 'Capulet' }], { last: 'Capulet'}));
<强>输出强>
[ { first: 'Tybalt', last: 'Capulet' } ]