关于javascript:迭代数组并返回匹配的值?

Iterate over an array and return only matched values?

本问题已经有最佳答案,请猛点这里访问。

我正在使用JSON,并希望迭代一个数组,只返回我正在寻找的值。 例如,如果我有一个对象数组,并且每个对象都有特定书籍的信息,我如何迭代该数组中的每个对象并仅返回匹配的对象?

我已经尝试过使用地图,但是这样做(但不能按我需要的方式工作):

1
2
3
4
5
6
7
8
9
// 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'。 如何在找到匹配后立即停止并返回该匹配? 想知道如何使用"过滤器"(如果可能)(?)或类似方式来执行此操作。

谢谢。


我想这取决于你想要匹配多本书还是只有一本书。

匹配多本书

您可以通过filter()函数完成此操作,该函数可以处理多本书:

1
const favoriteBooks = books.filter((b) => { return b.title == this.props.params.id;});

匹配一本书

否则,您可能希望find()函数返回单个函数:

1
const favoriteBook = books.find((b) => { return b.title == this.props.params.id;});

注意:请特别注意如何使用this关键字,因为它可以在您的某个函数调用的上下文中显着更改。 您可以考虑在调用函数之前存储它,或者以不同的方式引用它以避免意外结果。


你想要.find(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find)

1
2
3
const favoriteBook = books.find((book) => {
    return book.title == this.props.params.id
}.bind(this)); //.bind for context of 'this'


尝试使用.filter()仅获取所需的项目,然后使用.map()获取您的特定字段。


试试这个:

1
const favoriteBook = books.find((book) => (book.title === this.props.params.id));