在其中键入es6/typescript备选方案



是否有下划线方法的替代方法(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)

最新更新