javascript的时间复杂度是多少;s array.indexOf?

javascript的时间复杂度是多少;s array.indexOf?,javascript,Javascript,indexOf是简单地遍历数组,还是做一些更快的事情? 我知道这取决于实现,但Chrome或Firefox做什么呢?如果不能保证数组中项目的性质或顺序,你就不能做得比O(n)更好,因此它会遍历数组。即使是在CPU之间并行实际搜索(不知道firefox或chrome是否能做到这一点,但它们可以做到),它也不会改变有限数量CPU的时间复杂性。在未排序的数组中找到与值匹配的第一个索引的最有效方法是按顺序遍历列表,即O(n)。还有一些提示: 返回数组中可以找到给定元素的第一个索引,如果不存在,则返回-1

indexOf是简单地遍历数组,还是做一些更快的事情?
我知道这取决于实现,但Chrome或Firefox做什么呢?

如果不能保证数组中项目的性质或顺序,你就不能做得比O(n)更好,因此它会遍历数组。即使是在CPU之间并行实际搜索(不知道firefox或chrome是否能做到这一点,但它们可以做到),它也不会改变有限数量CPU的时间复杂性。

在未排序的数组中找到与值匹配的第一个索引的最有效方法是按顺序遍历列表,即O(n)。还有一些提示:

返回数组中可以找到给定元素的第一个索引,如果不存在,则返回-1

[……]

fromIndex

默认值:0(搜索整个数组)
开始搜索的索引。如果索引大于或等于数组的长度,则返回-1,这意味着将不搜索该数组。如果提供的索引值为负数,则将其作为距数组末尾的偏移量。注意:如果提供的索引为负数,仍将从前向后搜索数组。如果计算的索引小于0,则将搜索整个数组

如果你想知道,:

EncodedJSValue JSC\u HOST\u调用arrayProtoFuncIndexOf(ExecState*exec)
{
// 15.4.4.14
JSObject*thisObj=exec->hostThisValue().toThis(exec,StrictMode).toObject(exec);
unsigned length=thisObj->get(exec,exec->propertyNames().length).toUInt32(exec);
如果(exec->hadException())
返回JSValue::encode(jsUndefined());
无符号索引=ArgumentClampedIndexFromStartEnd(exec,1,长度);
JSValue searchElement=exec->argument(0);
对于(;索引<长度;++索引){
JSValue e=getProperty(exec、thisObj、index);
如果(exec->hadException())
返回JSValue::encode(jsUndefined());
如果(!e)
继续;
if(JSValue::strimequal(exec、searchElement、e))
返回JSValue::encode(jsNumber(index));
}
返回JSValue::encode(jsNumber(-1));
}

在ECMA6中,您拥有
集合()
,然后您可以执行以下操作:

var obj = new Set();
obj.add(1);
obj.has(1) === true;
obj.has(2) === false;

has
的性能是O(1)。

您可能应该去一个邮件列表,向开发人员介绍您关心的实现,并在那里询问。由于ECMAScript类似Java,我希望开发人员尽可能利用底层平台——本地方法,因为大多数人已经为此优化了函数。但这只是一个猜测,Firefox的实现是可以看到的@游戏炼金术士请控制你的挫败感,并将其引导到按钮上,比如说,
close
按钮,因此……JS数组并不是顾名思义的常规数组,而是哈希映射。除了键之外,还可以为值创建第二个索引,从而在值查找时提供更好的时间复杂性,以换取内存使用。@Casey值得注意的是,JS数组是JS对象,只有整数键和一些附加方法。从中可以看出:“数组是类似列表的对象,其原型具有执行遍历和变异操作的方法。”通过运行
Object.keys(['a','b']),您可以看到数组使用键/值对
对象值(['a','b'])
。谢谢,如果我知道我使用的数组是排序的,我最好使用二进制搜索的自定义实现,因为它具有更高的复杂性,即
O(log(N))
?@Maximus,这取决于数组的大小,但是如果它足够大,这非常重要,那么值得一试。我会用一个JavaScript函数替换一个内置的(C++)函数来确定它不是很慢(对于小<代码> N<代码>,C++中的效率较低的算法可能会击败JavaScript中更有效的算法。”<代码>())/代码>肯定比但我们不确定元素的顺序是否会对原始作者产生任何影响……是的,它没有太多信息,但我只想展示另一种可能性!谢谢这也是O(n)@StefanoSaitta不,这不是问题的答案