【问题标题】:Access previous key/value in for-in loop在 for-in 循环中访问前一个键/值
【发布时间】:2013-07-10 19:12:12
【问题描述】:

我是 javascript 新手,如果有什么明显的地方请见谅。

假设我有一个如下的 for-in 循环...

for( var key in myObj ){

   alert("key :" + myObj[key] ); // accessing current key-value pair

   //how do I access previous element here?
}

是否可以在 for-in 循环中访问上一个或下一个键/值对?

【问题讨论】:

  • 你为什么不试一试..?

标签: javascript loops for-loop for-in-loop


【解决方案1】:

不,没有直接的方法。一种解决方法是在keys 上使用for 循环而不是for..in,并按数字索引选择元素:

 keys = Object.keys(myObj);
 for(var i = 0; i < keys.length; i++) {
     current = keys[i];
     previous = keys[i - 1];
     next = keys[i + 1];
     ...
  }

【讨论】:

  • +1。是的,我想我会使用这种方法并放弃 for-in 循环。我期待在 for-in 循环中有一些直接的方法来做到这一点。
  • @PratikPatel: for..in 无论如何都是个坏主意,所以是的,放弃吧。
  • 我想避免使用 Object.keys() 函数,因为这个答案stackoverflow.com/a/4889658/2039750 中有一条评论说:“这不仅遍历对象,而且还创建了一个全新的数组及其所有钥匙……”
  • @PratikPatel:不要过早优化。除非您的对象有数百万个键,否则创建一个新数组根本不重要。
【解决方案2】:
var lastobj = '';
for( var key in myObj ){
   alert("key :" + myObj[key] ); // accessing current key-value pair

   if(lastobj) {
        //do things with last object here using lastobjs
   }
lastobj = myObj[key]
}

在循环中给 lastobj 一个新值,你将在循环期间拥有“内存中”的值。 if 语句主要是因为第一次循环运行,当时 lastobj 还为空。

【讨论】:

    【解决方案3】:

    你不能在循环结束时说:

    previousKey = key
    

    那么你可以在下一个循环中使用 previousKey 吗? 这是我在自己的小脚本中做的事情,我并不擅长编写脚本,但到目前为止这对我有用。

    【讨论】:

      【解决方案4】:

      试试看

      var prev = '';
      for( var key in myObj ){
      
         alert("key :" + myObj[key] ); // accessing current key-value pair
         if(prev)
            alert('Prev key :'+prev);
         prev = myobj[key];
         //how do I access previous element here?
      }
      

      【讨论】:

        猜你喜欢
        • 2012-02-29
        • 2011-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多