Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
识别Javascript对象中的最后一次迭代_Javascript_Loops_Object - Fatal编程技术网

识别Javascript对象中的最后一次迭代

识别Javascript对象中的最后一次迭代,javascript,loops,object,Javascript,Loops,Object,我有一个正在迭代的对象 for (el in object) { // Some work here } 我想知道迭代中的最后一次迭代是什么时候,所以我可以这样做 for (el in object) { // Some work here if (last_iteration) { // Do something } } 有什么简单的方法吗?您可以这样做: var first = true; var prev; for (var el in object) { // Some wor

我有一个正在迭代的对象

for (el in object) {
// Some work here
}
我想知道迭代中的最后一次迭代是什么时候,所以我可以这样做

for (el in object) {
// Some work here
if (last_iteration) {
// Do something
}
}

有什么简单的方法吗?

您可以这样做:

var first = true;
var prev;

for (var el in object) {
  // Some work here
  if (first) {
    first = false;
  } else {
    doSomething(prev, object[prev]);
  }
  prev = el;
}

if (prev !== undefined) { // There was at least one element
  doSomethingElse(prev, object[prev]); // Prev is now last of all elements
}
在这种情况下,您希望以一种方式处理除最后一个元素以外的所有元素(
doSomething
),并以另一种方式处理最后一个元素(
doSomethingElse

如果要以一种方式处理所有元素(
doSomething
),并且只对最后一个元素进行额外处理(
doSomethingExtra
),可以执行以下操作:

var prev;

for (var el in object) {
  // Some work here
  doSomething(el, object[el]);
  prev = el;
}

if (prev !== undefined) { // There was at least one element
  doSomethingExtra(prev, object[prev]); // Prev is now last of all elements
}
为了使它更简短,您可以像Török Gábor在中所做的那样,通过重用
el
变量,即:

var el;

for (el in object) {
  // Some work here
  doSomething(el, object[el]);
}

if (el !== undefined) { // There was at least one element
  doSomethingExtra(el, object[el]); // El is now last of all elements
}

希望这能有所帮助。

请注意,只有当您迭代的对象是数组(具有数字键)时,这才有效。

请注意,在
i
之前的
+
符号是必需的,因为如果省略,它将执行字符串连接,键将导致
01
12
23

如前所述,属性没有明确的顺序,因此最后一个枚举的属性只有在之后才知道

var object = { a: 'b', c: 42 };
for ( var string in object ) ;
alert( object[string] );  // last property name is still here 

我知道我迟到了,但我只是遇到了这个问题,并像这样解决了它:

var first = true;
var prev;

for (var el in object) {
  // Some work here
  if (first) {
    first = false;
  } else {
    doSomething(prev, object[prev]);
  }
  prev = el;
}

if (prev !== undefined) { // There was at least one element
  doSomethingElse(prev, object[prev]); // Prev is now last of all elements
}
var i=0;
var对象={a:1,b:2};
var length=Object.keys(Object.length);
用于(对象中的el){
var last=i==length-1;//如果是last则为true,如果不是last则为false
控制台日志(i、el、last);
i++;

}
您是在迭代对象(a
{}
)的属性,还是在迭代数组(a
[]
)的属性?是否要对最后一个元素执行特定操作?或者它只是一个计时的东西(当完成处理时,做x)?1-它不是一个数组,它是一个对象。2-我不能在循环之外这样做(这会使事情更容易),因为代码的性质(有点复杂,使用eval,使我无法控制执行的代码)如果它是一个对象,元素的顺序不能保证,因此没有“最后一个”元素我的意思是,最后一个元素可能会随着迭代的不同而变化(这在主流浏览器中不会发生,但ECMA规范明确规定不要依赖对象键顺序),每次使用
var
语句声明变量
el
时,您的函数都会产生不同的值,然后您可以保留额外的
prev
变量。@Török如问题中所述,OP希望单独处理最后一个元素。链接中的代码将处理它两次,一次在
for
中,一次在
}
@icyrock.com之后:好的。对于我来说,根据最初的示例,他似乎希望对最后一个元素进行额外的处理。在这种情况下,它是有效的。如果对象是空的,它仍然会调用'doSomething(prev);'最后,你还没有设置prev!!!最好在最后一个“doSomething”周围加上一些东西,检查是否设置了“prev”(如果没有跳过!)。这是正确的。。。但同样,我们不知道OP在迭代什么。如果它是一个数组,这是最好的方法(另一种方法会让我的眼睛受伤),如果给定
var a=[1,2,undefined,4,5],它就会失败
对象
不能具有类型为
Number
的属性名称。如果
a
是字符串,则该属性名称也会失败。哦,如果你用
替换
,而
@user205376尝试
var o={“1”:“1”,“2”:“2”},那么它也不起作用