在Javascript中,循环通过3个字符串数组的可靠方法是什么?

时间:2010-11-29 20:15:29

标签: javascript

这样的东西有效,但看起来有点笨拙:

for (i in {foo: 1, bar: 1, wah: 1}) {  // loops through foo, bar, wah
  console.log(i + " haha");            // can view using Firebug or Chrome 
}

如果使用数组,我不想为数组创建任何全局临时变量...此外,这必须适用于任何现代浏览器IE7 / FF / Chrome / Safari。感谢。

7 个答案:

答案 0 :(得分:3)

您需要为某些浏览器声明i

我会使用for循环的初始化部分来声明变量。

阵列:

for (var i = 0, arr = ['foo', 'bar', 'wah']; i < arr.length; i++) {
  console.log(arr[i] + " haha");
}

答案 1 :(得分:2)

如果要求您不想在全局(或当前)范围内创建变量,只想使用数组文字,那么use forEach,尽管您需要对其进行原型设计进入不支持它的浏览器。

["foo", "bar", "wah"].forEach(function( v, i, arr ){
  console.log(i + ' ' + v + " haha");
});

这是forEach的{​​{3}}原型为Array。

if (!Array.prototype.forEach)
{
  Array.prototype.forEach = function(fun /*, thisp */)
  {
    "use strict";

    if (this === void 0 || this === null)
      throw new TypeError();

    var t = Object(this);
    var len = t.length >>> 0;
    if (typeof fun !== "function")
      throw new TypeError();

    var thisp = arguments[1];
    for (var i = 0; i < len; i++)
    {
      if (i in t)
        fun.call(thisp, t[i], i, t);
    }
  };
}

答案 2 :(得分:1)

好的我发布这个原因我喜欢奇怪的代码,所以对我很轻松......

如果你绝对不想创建一个临时变量,全局或本地,并且不能使用或添加forEach函数(如patrick dw的答案),你可以拖出可怕的with声明要做的工作。它不是很漂亮......

with(['foo', 'bar', 'wah'])
  while(valueOf().length)
    console.log(valueOf().shift())

看看马,没有变数!

如果您对使用词法范围的变量没问题,那么您可以做一些更清洁的事情......

with({a: ['foo', 'bar', 'wah']})
  while(a.length)
    console.log(a.shift())

您可以使用自动执行的匿名函数执行相同的操作,但语法可怕且(可能)性能较差。

无论如何,如果可以的话,我强烈建议你使用forEach,或者只是......你知道,局部变量。

答案 3 :(得分:0)

我认为这会更好看:

   function show(arr){
     for(el in arr){
      console.log(arr[el])   
     }    
    }
    show({foo: 1, bar: 1, wah: 1});

答案 4 :(得分:0)

为什么不使用var关键字来表示局部变量(因为没有var关键字声明的变量会自动为全局变量。)

此外,{ ... }表示JavaScript对象,而不是数组。您可以使用[ ... ]定义数组:

var myArray = ["one", "two", "three"];

for (var i in myArray) {
    console.log(myArray[i] + " haha");
}

希望有所帮助!

答案 5 :(得分:0)

使用for时要小心,因为您可能会获得原型链中的键而不是对象的实际部分。所以在你的例子中你想要使用:

var obj = {foo: 1, bar: 1, baz: 1};
for(var key in obj) {
   if(obj.hasOwnProperty(key)) {
       console.log(key, obj[key]); //key, value
   }
}

答案 6 :(得分:0)

怎么样

javascript:
Array.prototype.enum = function (fn) {
  for( var i=0; i < this.length; i++ )
    fn( this[i] )
};

["one","two","tri"].enum( function(item){
  alert(item)
})

重新格式化