js函数不适用于JSON.parse

时间:2017-11-09 19:55:44

标签: javascript html json

这段代码有什么问题?当我点击按钮时,它在第一个数组值之前显示未定义:

m <- matrix(c("L4", "JUAN", "6", "1.345",
"L4", "PEPE",  "8",  "1.5678",
"L4", "JULIA", "4", "3.156"), nrow = 3, byrow = T)
df <- as.data.frame(m)
df$V3 <- as.integer(df$V3)
df <- df[order(df$V3), ]
function loadDoc() {
  var x;
  var edare = JSON.parse('{"names":["ali", "mansour", "taghi"]}');
  for (var i in edare.names) {
    x += edare.names[i] + "<br>";
    document.getElementById("demo").innerHTML = x;
  }
}

4 个答案:

答案 0 :(得分:2)

因为您的x变量的初始值为undefined。因此,当您尝试与另一个字符串连接时,它会undefined + string

要解决此问题,您应该为变量提供初始值:

var x = "";

此外,对于数组,您应该使用for循环而不是for...in。有关详细信息,请查看this

最后,还应该将你的.innerHTML = x;移到循环之外,以防止在每次迭代时更新DOM。

var x = "";
var edare = JSON.parse('{"names":["ali", "mansour", "taghi"]}');

for (var i=0; i<edare.names.length; i++) {
    x += edare.names[i] + "<br>";
}

document.getElementById("demo").innerHTML = x;

答案 1 :(得分:0)

正确迭代你的数组:

var i, nameConcat = "";
for(i=0; i < edare.names.length; i++){
    nameConcat += edare.names[i] + "<br>";
}
document.getElementById("demo").innerHTML = nameConcat;

或者:

var concatNames = "";
edare.names.forEach(function(name){
    nameConcat += name + "<br>";
});
document.getElementById("demo").innerHTML = nameConcat;

答案 2 :(得分:0)

使用.reduce()从字符串数组构造单个字符串。

这样你只需要设置.innerHTML一次。

function loadDoc() {
  const edare = JSON.parse('{"names":["ali", "mansour", "taghi"]}');

  document.getElementById("demo").innerHTML = edare.names.reduce((s, itm) =>
    s + itm + "<br>"
  , "")
}
<input type="button" onclick="loadDoc();" value="test">
<p id="demo"></p>

或只是.join()列表。

function loadDoc() {
  const edare = JSON.parse('{"names":["ali", "mansour", "taghi"]}');

  document.getElementById("demo").innerHTML = edare.names.join("<br>");
}
<input type="button" onclick="loadDoc();" value="test">
<p id="demo"></p>

这里唯一不同的是,最后没有尾随<br>,但如果你真的需要,可以轻松添加。{/ p>

答案 3 :(得分:0)

但它适用于此:

function loadDoc() {
var x="";
var edare = JSON.parse ('{"names":["ali", "mansour", "taghi"]}');
for (var i in edare.names) {
    x += edare.names[i] + "<br>";
    document.getElementById("demo").innerHTML = x;
  }
}