【问题标题】:Javascript .pop() and .sort() not working right in a for loopJavascript .pop() 和 .sort() 在 for 循环中无法正常工作
【发布时间】:2013-07-29 02:29:23
【问题描述】:

我试图删除数组中的最后一个元素,但它最终将删除的元素放回列表的顶部,并且其他一些元素的列出方式不同。

使用 .sort() 方法也是如此。输出显示这句话五次: 托尔斯泰写了战争与和平,吐温写了哈克贝利·费恩

var author_title = new Array(5)
author_title[0]="Tolstoy wrote War and Peace";
author_title[1]="Twain wrote Huckleberry Finn";
author_title[2]="Hardy wrote The Return of the Native";
author_title[3]="Dickens wrote A Christmas Carol";
author_title[4]="Uris wrote Exodus";

for(var count=0;count<author_title.length;count++) {
document.write(author_title.pop() + "<br>");
}

for(var count=0;count<author_title.length;count++) {
document.write(author_title.sort()+"<br>");
}

【问题讨论】:

  • 不要使用for...in 循环遍历数组。 for...in 循环用于迭代对象的属性。
  • 你不应该从根本上改变你的问题。您已使任何现有答案无效。

标签: javascript arrays for-loop


【解决方案1】:

如果你想改变你的数组然后使用pop,在for循环之外写一个等效于array.length的变量,然后将你的变量设置为那个声明的变量。您必须记住,每次 .pop() 时都在更改数组,因此在每次迭代中都会更改 for-loop。此外,&lt;br /&gt; 用于 HTML,因此您可能刚刚忘记了上面的自动关闭标签

var length = array.length;
for( var i = 0; i > length; i++ ) {
     document.write( array.pop() + "\n")
}

【讨论】:

    【解决方案2】:

    这其中的任何部分都不应该起作用。 for..in 循环正确地遍历 keys,而不是值。它不适用于迭代数组。在我的机器上,它会产生0,1,2等。

    在遍历数组时,您还尝试pop 元素。 pop 修改数组,因此您的迭代器将在每次迭代时失效。

    你想要的是一个简单的for 循环:

    for (var i = 0; i < author_title.length; ++i) {
      console.log(author_title[i]);
    }
    

    【讨论】:

    • 哦,好的,谢谢!我不知道。所以在我的循环中我可以写这个 author_title.pop() 然后做 document.write?
    • 你可以,但你不应该。为什么您首先对使用pop 感兴趣?如果你正在缩小数组,你应该只使用while (author_title[0]) { x = author_title.pop(); ... }
    • 我还是 Javascript 新手。我只是按照我正在阅读的书进行编码,哈哈
    • -1:No part of this should work。它绝对必须在符合 ECMA-262 的实现中工作。数组索引只是对象属性(数组是对象),for..in 在每个浏览器中绝对可靠地循环遍历可枚举属性。
    • @RobG 关键是它不像问题所示那样工作。他暗示,当他实际枚举属性名称(或数组索引)时,编写的代码会打印出每个对象属性的。正如我所说,它打印 0、1、2 等,not “将这句话显示五次:托尔斯泰写了战争与和平,吐温写了哈克贝利·费恩”,他声称它显示。
    猜你喜欢
    • 2016-04-01
    • 2021-09-26
    • 1970-01-01
    • 2017-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 2013-06-26
    相关资源
    最近更新 更多