使用JSON进行数组推送

时间:2012-05-10 12:59:05

标签: javascript json

有人可以告诉我为什么这会打印从117到300的数字吗?

var x = [12, 55, 177];
var y = [25, 75, 255];
var value = [];

for (var i = 1; i <= 300; i++) {
    value.push(JSON.stringify(i));
    document.write(value);
} ​

结果:

117, 118, ..., 299, 300 

(jsFiddle http://jsfiddle.net/minagabriel/6crZW/

3 个答案:

答案 0 :(得分:5)

这样做是因为document.write()是一个不应该使用的旧讨厌的黑客,并且与jsfiddle不兼容。

如果从循环中删除它并添加:

console.log(value);

在最后你会看到数组已正确累积。

此外,可能只想在构建之后对数组进行JSON编码:

var value = [];
for (var i = 1; i <= 300; i++) {
    value.push(i);
} 
console.log(JSON.stringify(value));

答案 1 :(得分:0)

只需将数组打印移到循环外部即可:

var x = [12, 55, 177];
var y = [25, 75, 255];
var value = [];

for (var i = 1; i <= 300; i++) {
    value.push(JSON.stringify(i));             
} 

document.write(value);
​

http://jsfiddle.net/6crZW/8/

答案 2 :(得分:0)

首先,这与array.push或JSON无关。 : - )

您的代码首先不会输出117,118等。这就是Chrome为您展示它的方式。您似乎在Chrome中遇到了一些内部限制或错误,该行与其中没有空格的行有关。在Firefox中,它没有那样做。

从根本上说,您的代码重复输出数组而没有任何换行符。因此,在循环的第一次迭代中,输出

1

......没有换行符。在第二次迭代中,输出1,2没有换行符,所以我们有:

11,2

...第三,输出1,2,3

11,21,2,3

......依此类推,直到你有了很长的路要走。出于某种原因,Chrome最终会丢失它并显示一堆空格,然后是文本,有点混乱。

您可能希望通过移动document.write语句在最后输出最终数组。或者,你可以使用document.writeln,它会在每一行的末尾加上一个换行符(这似乎让Chrome很开心;但是输出对人类来说仍然非常难以阅读,因为当然有一个换行符HTML只会产生空格,而不是实际的换行符。

但到目前为止更好的方法是使用比document.write更现代的东西,比如(例如)附加到document.bodyhttp://jsfiddle.net/CLmYW/

var value = [];

for (var i = 1; i <= 300; i++) {
    value.push(i);
    display(value);
}

function display(msg) {
    var p = document.createElement('p');
    p.innerHTML = msg;
    document.body.appendChild(p);
}

......很好地输出

1
1,2
1,2,3
1,2,3,4
1,2,3,4,5
1,2,3,4,5,6
1,2,3,4,5,6,7
1,2,3,4,5,6,7,8
1,2,3,4,5,6,7,8,9

......等等。

console.log对于在处理事物时只是查看事物的状态也非常有用。它在所有最新主流浏览器的开发工具中得到支持。

另请注意,我已删除了JSON.stringify;所做的只是返回索引计数器的字符串版本,在输出中,数组中的数字是否真的是数字或字符串无关紧要。