这段代码有什么问题?当我点击按钮时,它在第一个数组值之前显示未定义:
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;
}
}
答案 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;
}
}