【问题标题】:Find an object in an array?在数组中查找对象?
【发布时间】:2018-11-20 14:58:09
【问题描述】:

我有一个数组:

['test', 'test2', {a: a, b: b}, 'test3']

我怎样才能只得到第一个对象?

我需要循环并进行类型测试吗?还是有更有效的方法?

【问题讨论】:

标签: javascript


【解决方案1】:

我需要循环并进行类型测试吗?

你做了,或者至少,某事做了。

例如,要查找数组中的第一个对象,您可以使用find

const first = theArray.find(e => typeof e === "object");

或者,如果您不希望 null 匹配:

const first = theArray.find(e => e && typeof e === "object");

或者有没有更有效的方法?

循环将足够有效。如果你不喜欢 find 的回调调用(它们真的、真的、真的快),你可以使用一个无聊的旧 for 循环:

let first;
for (let i = 0, l = theArray.length; i < l; ++i) {
    const e = theArray[i];
    if (typeof e === "object") { // Or, again: `e && typeof e === "object"`
        first = e;
        break;
    }
}

...但它对性能产生影响的可能性实际上是微乎其微的。

【讨论】:

  • 详细说明 OP:Array.find 只是循环遍历数组并在找到与您的测试匹配的第一个元素时停止 - 即,使回调函数返回 true 的第一个元素。只要您的数组没有任何明确定义的顺序(例如,字母或数字之类的),您能做的最好的就是线性搜索,因为您不知道哪些元素紧随其后。跨度>
  • ie支持吗?我知道没有人关心 ie 但无论如何
  • @Timggwp - 在 IE 中回复 find:不,你需要一个 polyfill(很容易获得)。
  • @NinaScholz - 取决于 OP 想要什么。如果他们不希望 null 匹配,那么是的,他们需要它。
  • @Timggwp - :-) 尽管如此,我在答案中添加了一个很好的观点,并且可能应该在她提出之前提到。
猜你喜欢
  • 2011-01-07
  • 1970-01-01
  • 1970-01-01
  • 2021-01-15
  • 2018-08-13
  • 2017-04-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多