是否有下划线方法的替代方法(where(?
我想找到一个具有一些属性的数组,如下所示:
_.where(listOfPlays, {author: "Shakespeare", year: 1611});
=> [{title: "Cymbeline", author: "Shakespeare", year: 1611},
您可以使用Array#filter
。您将无法使用对象,但可以直接使用属性:
let results = listOfPlays.filter(play => play.author === "Shakespeare" && play.year === 1611);
或者,如果您确实想要_.where
:的副本
function where(array, object) {
let keys = Object.keys(object);
return array.filter(item => keys.every(key => item[key] === object[key]));
}
where
过滤来自array
的与来自对象object
的每个键值匹配的对象。
Array.filter、Array.each和Object.entries 的基本概念
var plays = [
{ title: "world", author: "hello", year: 1611 },
{ title: "Cymbeline", author: "Shakespeare", year: 1611 },
{ title: "Bacon", author: "Shakespeare", year: 1611 },
{ title: "Dance", author: "Shakespeare", year: 1610 }
]
const getResults = (plays, filters) => {
const entries = Object.entries(filters)
return result = plays.filter( play => {
return entries.every(([key, value]) => {
return play[key] === value
})
})
}
var testOne = getResults(plays, {
author: "Shakespeare", year: 1611
})
var testTwo = getResults(plays, {
year: 1611
})
console.log(testOne)
console.log(testTwo)