我正在使用JSON,并想迭代一个数组,只返回我正在寻找的值。例如,如果我有一个对象数组,并且每个对象都有特定书籍的信息,我如何迭代该数组中的每个对象并仅返回匹配的对象?
我已经尝试过使用地图,但是这样做(但不能按我需要的方式工作):
// books is from my imported JSON object
const favoriteBook = books.map((book) => {
if (book.title == this.props.params.id) {
return book;
}
});
console.log(favoriteBook)
然而,当我在console.log(favoriteBook)时,我看到一个数组返回了一个匹配的对象,加上所有不匹配的'undefined'。如何在找到匹配后立即停止并返回该匹配?想知道如何使用“过滤器”(如果可能)(?)或类似的方式来执行此操作。
感谢。
答案 0 :(得分:6)
我认为这取决于您是想要匹配多本书还是只需一本书。
匹配多本图书
您可以通过filter()
函数完成此操作,该函数可以处理多本书:
const favoriteBooks = books.filter((b) => { return b.title == this.props.params.id;});
匹配单本书
否则,您可能希望find()
函数返回单个函数:
const favoriteBook = books.find((b) => { return b.title == this.props.params.id;});
注意:请特别注意您使用this
关键字的方式,因为它可以在您的某个函数调用的上下文中发生显着变化。您可以考虑在调用函数之前存储它,或者以不同的方式引用它以避免意外结果。
答案 1 :(得分:2)
您想要.find
(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find)
const favoriteBook = books.find((book) => {
return book.title == this.props.params.id
}.bind(this)); //.bind for context of 'this'
答案 2 :(得分:1)
试试这个:
const favoriteBook = books.find((book) => (book.title === this.props.params.id));
答案 3 :(得分:1)
尝试使用.filter()
仅获取您想要的项目,然后使用.map()
获取您的特定字段。