【发布时间】:2018-11-20 14:58:09
【问题描述】:
我有一个数组:
['test', 'test2', {a: a, b: b}, 'test3']
我怎样才能只得到第一个对象?
我需要循环并进行类型测试吗?还是有更有效的方法?
【问题讨论】:
-
不是,他的意思是如何找到object类型数组的第一项
标签: javascript
我有一个数组:
['test', 'test2', {a: a, b: b}, 'test3']
我怎样才能只得到第一个对象?
我需要循环并进行类型测试吗?还是有更有效的方法?
【问题讨论】:
标签: javascript
我需要循环并进行类型测试吗?
你做了,或者至少,某事做了。
例如,要查找数组中的第一个对象,您可以使用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;
}
}
...但它对性能产生影响的可能性实际上是微乎其微的。
【讨论】:
Array.find 只是循环遍历数组并在找到与您的测试匹配的第一个元素时停止 - 即,使回调函数返回 true 的第一个元素。只要您的数组没有任何明确定义的顺序(例如,字母或数字之类的),您能做的最好的就是线性搜索,因为您不知道哪些元素紧随其后。跨度>
find:不,你需要一个 polyfill(很容易获得)。
null 匹配,那么是的,他们需要它。