【问题标题】:Best loop in javascript that allows returning of value?javascript中允许返回值的最佳循环?
【发布时间】:2017-02-21 06:12:51
【问题描述】:

javascript中有一些循环,包括forEach、some、map和reduce。但是,根据我目前的理解,如果您想遍历数组并返回特定索引的值,这些都不合适。看来我几乎只剩下标准 for 循环了。这是真的吗?

例如,如果我有一个对象数组...并且我想找到具有特定值的项目的索引...我可以使用常规 for 循环以外的任何东西吗?

【问题讨论】:

  • findIndex()indexOf()
  • 但是如果它是一个对象数组呢?假设[{name: 'foo', age: 23}, {name: 'foo2', age: 34}]?我如何使用 indexOf 来搜索这个?
  • @Grateful: yourList.findIndex(function(item) { return item.name === 'foo2'; }).
  • 如果它是一个对象数组,即使那样你也可以使用findIndex()。此函数采用一个函数,您可以在其中定义相等标准。同样,您可以使用forEach( item, index, array ) 循环并检查每个元素是否相等。无论哪个项目匹配,您都可以返回该元素的 index

标签: javascript arrays loops iteration


【解决方案1】:

Array.prototype.findIndex() ,正如 @Andreas 在 cmets 中所建议的那样。

您可以将一个函数传递给 findIndex() 方法并在该函数中定义您的相等标准。

它将返回满足函数中定义的相等标准的第一个数组元素的索引。

【讨论】:

    【解决方案2】:

    还有for ... of ...

    for (variable of iterable) {
      statement
    }
    

    【讨论】:

    • 这听起来很有趣......但我想它会遍历整个数组列表,无论你是否找到了一个项目。这是真的吗?
    • @Grateful - 你仍然可以breakreturn,与任何其他普通循环一样。
    • 你可以在里面放一个return声明,或者break它。
    • 与传统的 for 循环相比,这在性能方面有什么额外的好处吗?
    【解决方案3】:

    您可以使用 JavaScript 库 http://underscorejs.org。它有很多功能。出于您的目的,您可以使用 _.indexOf 。它将返回可以在数组中找到值的索引

    示例:

    var data=[1, 2, 3];
    var index= _.indexOf(data, 2);
    

    输出将是 1

    【讨论】:

    • JS有内置数组.indexOf()方法,为什么还要使用Underscore?
    【解决方案4】:

    Array.prototype.findIndex()Array.prototype.indexOf() 就像大家说的那样。

    【讨论】:

      【解决方案5】:

      您可以使用 foreach() 而不是常规的 for。这是最简单的,您可以迭代并获取索引。欲了解更多信息:JavaScript Array forEach() Method

      【讨论】:

      • 我不认为你有我的问题......我已经提到了 forEach 的存在......但是,问题是我无法让它返回项目值。
      • 返回等于该值的特定元素的索引,对吧?如果您检查我发送的链接,它会返回元素的索引和值。
      • 该链接显示了如何使用带参数的函数获取项目索引及其值。对不起,如果我把这弄混了。一切顺利。
      • 关键是你不能说result = array.forEach(..),因为.forEach() 函数本身不返回结果。你必须在循环中说result = "something",并且没有办法跳出forEach(),所以如果你只是想找到一个特定的元素,效率很低。
      • 感谢您抽出宝贵时间@MalcolmVaz。虽然,我没有找到我正在寻找的确切内容......你尝试一下真是太好了。
      猜你喜欢
      • 1970-01-01
      • 2016-05-29
      • 1970-01-01
      • 1970-01-01
      • 2016-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-23
      相关资源
      最近更新 更多