我试图通过一个循环构建一个JSON
数组,其中input
className和value将用作JSON
obj和key。但是我无法创建一个,也找不到有关如何创建一个的信息。我在下面提供了一个示例,在注释行中需要帮助,我希望console.log(json_array);
返回{"class_1":"val_1", "class_2":"val_2", "class_3":"val_3", "class_4":"val_4", "class_5":"val_5"}
。如何生成这样的JSON
数组?还可以通过这种方法制作一个JSON
数组吗?
document.querySelector("button").onclick = function() {
var json_array = [];
document.querySelectorAll("div input").forEach(x => {
json_array.push(x.className.toString() : x.value.toString()); // DOESN'T WORK
});
console.log(json_array);
};
<html>
<head>
<meta charset="UTF-8">
<title>TEST</title>
</head>
<body>
<div>
<input type="text" class="class_1" value="val_1">
<input type="text" class="class_2" value="val_2">
<input type="text" class="class_3" value="val_3">
<input type="text" class="class_4" value="val_4">
<input type="text" class="class_5" value="val_5">
</div>
<button>BUILD</button>
</body>
</html>
答案 0 :(得分:1)
如果只需要一个JSON对象,则必须设置密钥:
var json_array = {};
//...
json_array[x.className] = x.value;
答案 1 :(得分:1)
Object
没有push
,这是一个数组函数,您需要使用方括号表示法添加键:json_array[x.className] = x.value
document.querySelector("button").onclick = function() {
var json_array = {};
document.querySelectorAll("div input").forEach(x => {
json_array[x.className] = x.value
});
console.log(json_array);
};
<html>
<head>
<meta charset="UTF-8">
<title>TEST</title>
</head>
<body>
<div>
<input type="text" class="class_1" value="val_1">
<input type="text" class="class_2" value="val_2">
<input type="text" class="class_3" value="val_3">
<input type="text" class="class_4" value="val_4">
<input type="text" class="class_5" value="val_5">
</div>
<button>BUILD</button>
</body>
</html>
答案 2 :(得分:0)
document.querySelector("button").onclick = function() {
var json_array = [];
document.querySelectorAll("div input").forEach(x => {
json_array.push({x.className.toString() : x.value.toString())}); // DOESN'T WORK
});
console.log(json_array);
};
我认为这里的每个人仍在尝试猜测所需结果的具体形状,因为由于某些原因,您所布置的内容没有意义。我对您实际上正在寻找的东西的最佳猜测是……
[
{"class_1":"val_1"},
{"class_2":"val_2"},
{"class_3":"val_3"},
{"class_4":"val_4"},
{"class_5":"val_5"}
]
这将是Array中的Objects,其中输入字段className
是对象的键,而输入value
是该键的值。如果您想实现其他目标,请告诉我。
如果您实际要查找的是单个Object,并且将输入字段className
作为键,然后输入value
作为该键的值,就像这样...
{
"class_1": "val_1",
"class_2": "val_2",
"class_3": "val_3",
"class_4": "val_4",
"class_5": "val_5"
}
然后这就是您可以实现的目标...
document.querySelector("button").onclick = function() {
var js_obj = {};
document.querySelectorAll("div input").forEach(x => {
var className = x.className.toString(),
value = x.value.toString();
js_obj[className] = value;
});
console.log(js_obj);
};
答案 3 :(得分:0)
您需要使用dynamic property names push
来放置对象:
json_array.push({[x.className.toString()]: x.value.toString()});
演示:
document.querySelector("button").onclick = function() {
var json_array = [];
document.querySelectorAll("div input").forEach(x => {
json_array.push({
[x.className.toString()]: x.value.toString()
});
console.log(json_array);
};
<html>
<head>
<meta charset="UTF-8">
<title>TEST</title>
</head>
<body>
<div>
<input type="text" class="class_1" value="val_1">
<input type="text" class="class_2" value="val_2">
<input type="text" class="class_3" value="val_3">
<input type="text" class="class_4" value="val_4">
<input type="text" class="class_5" value="val_5">
</div>
<button>BUILD</button>
</body>
</html>
但是,如果要使用 object ,请使用方括号表示法添加属性:
document.querySelector("button").onclick = function() {
var json_array = {};
document.querySelectorAll("div input").forEach(x => {
json_array[x.className.toString()] = x.value.toString();
});
console.log(json_array);
};
<html>
<head>
<meta charset="UTF-8">
<title>TEST</title>
</head>
<body>
<div>
<input type="text" class="class_1" value="val_1">
<input type="text" class="class_2" value="val_2">
<input type="text" class="class_3" value="val_3">
<input type="text" class="class_4" value="val_4">
<input type="text" class="class_5" value="val_5">
</div>
<button>BUILD</button>
</body>
</html>
答案 4 :(得分:0)
您应使用computed-property-names
,并按如下所示包装键值对{[x.className.toString()] : x.value.toString()}
:
document.querySelector("button").onclick = function() {
var json_array = [];
document.querySelectorAll("div input").forEach(x => {
json_array.push({[x.className.toString()] : x.value.toString()}); // DOESN'T WORK
// ^^^^^^^^^^^^^^^^^^^^^^^^
});
console.log(json_array);
};
<html>
<head>
<meta charset="UTF-8">
<title>TEST</title>
</head>
<body>
<div>
<input type="text" class="class_1" value="val_1">
<input type="text" class="class_2" value="val_2">
<input type="text" class="class_3" value="val_3">
<input type="text" class="class_4" value="val_4">
<input type="text" class="class_5" value="val_5">
</div>
<button>BUILD</button>
</body>
</html>
答案 5 :(得分:0)
这是否提供您想要的?
使用Array.map
来转换元素集合。
根据计算属性的Ele建议进行调整
document.querySelector("button").onclick = function() {
let arr = Array.from(document.querySelectorAll("div input")).map(x => {
return {[x.className] : x.value};
});
console.log(arr);
};
<html>
<head>
<meta charset="UTF-8">
<title>TEST</title>
</head>
<body>
<div>
<input type="text" class="class_1" value="val_1">
<input type="text" class="class_2" value="val_2">
<input type="text" class="class_3" value="val_3">
<input type="text" class="class_4" value="val_4">
<input type="text" class="class_5" value="val_5">
</div>
<button>BUILD</button>
</body>
</html>