在nodeJs中有没有使用数组大小​​循环数组的方法?

use*_*291 51 javascript node.js

让我说我有

myArray = ['item1', 'item2']
Run Code Online (Sandbox Code Playgroud)

我试过了

for (var item in myArray) {console.log(item)}
Run Code Online (Sandbox Code Playgroud)

它打印0 1

我希望有item1 item2

是否有任何其他语法无需使用

for (var i = 0; i < myArray.length; i++)
Run Code Online (Sandbox Code Playgroud)

mak*_*ova 105

您可以使用 Array.forEach

var myArray = ['1','2',3,4]

myArray.forEach(function(value){
  console.log(value);
});
Run Code Online (Sandbox Code Playgroud)

  • 仍然使用引擎盖下的阵列长度.但它可能只是OP不想明确地引用长度. (3认同)

I a*_*ica 48

您可能想要的是一个相对较新的构造,用于枚举可迭代对象的值的明确目的:for...of

let myArray = ["a","b","c","d"];
for (let item of myArray) {
  console.log(item);
}
Run Code Online (Sandbox Code Playgroud)

...与...不同,枚举属性名称(在数组的情况下可能是1个数字索引).您的循环显示意外结果,因为您没有使用属性名称通过括号表示法获取相应的值...但您可以:for...in

let myArray = ["a","b","c","d"];
for (let key in myArray) {
  let value =  myArray[key]; // get the value by key
  console.log("key: %o, value: %o", key, value);
}
Run Code Online (Sandbox Code Playgroud)

1 遗憾的是,某些人可能已将可枚举属性添加到数组或其原型链中,这些属性不是数字索引...或者他们可能已在临时范围内分配了一个未分配索引的索引.这些问题都解释得很好这里.主要的外卖是,这是最好的循环明确从0array.length - 1,而不是使用for...in.

所以,这不是(正如我原先认为的那样)一个学术问题,即:

如果没有对方面的实用性,是它能够避免length遍历数组时?

根据你的评论(强调我的):

[...]为什么我需要计算数组的大小,而解释器可以知道它.

你有一种被误导的厌恶.它不是即时计算的; 只要数组的长度发生变化,它就会更新.你不会通过避免它来获得性能提升(除了缓存数组长度而不是访问属性):Array.length

循环测试

现在,即使你确实获得了一些边际绩效增长,我怀疑它是否足以证明处理上述问题的风险.

  • [为什么在数组迭代中使用"for ... in"这么糟糕的主意?](http://stackoverflow.com/q/500504/1048572) (4认同)
  • @DaveNewton我认为这是一个错字. (2认同)
  • 我喜欢你的stack-snippet-console,干得好!:] (2认同)

小智 5

要打印“ item1”,“ item2”,此代码将起作用。

var myarray = ['hello', ' hello again'];

for (var item in myarray) {
    console.log(myarray[item])
}
Run Code Online (Sandbox Code Playgroud)