迭代数组并仅返回匹配的值?

时间:2016-05-11 19:45:06

标签: javascript

我正在使用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'。如何在找到匹配后立即停止并返回该匹配?想知道如何使用“过滤器”(如果可能)(?)或类似的方式来执行此操作。

感谢。

4 个答案:

答案 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)

您想要.findhttps://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()获取您的特定字段。