如何使用JavaScript在哈希映射中选择性地存储用户输入
我有一个将JSON文件作为参数的算法,如下所示:如何使用JavaScript在哈希映射中选择性地存储用户输入,javascript,node.js,forms,hash,ejs,Javascript,Node.js,Forms,Hash,Ejs,我有一个将JSON文件作为参数的算法,如下所示: {"quiz": { "algorithm_id_1": "4", "algorithm_id_2": "2", "algorithm_id_3": "3", // ... algorithm_id是一个输入字段的id,后面的数字是用户为该输入字段选择的值(大多数是滑块) 我的问题如下: 如果一个输入与另一个输入具有相同的id,如何防止重叠?(例如“算法id\u 1”:“2”、“3”而不是“
{"quiz": {
"algorithm_id_1": "4",
"algorithm_id_2": "2",
"algorithm_id_3": "3",
// ...
algorithm_id
是一个输入字段的id,后面的数字是用户为该输入字段选择的值(大多数是滑块)
我的问题如下:
- 如果一个输入与另一个输入具有相同的id,如何防止重叠?(例如
而不是“算法id\u 1”:“2”、“3”
“算法id\u 1”:“2”、…“算法id\u 1:”3”
const allinput=$(“:input”);
//取回
对于(变量i=0;i });
您可以更改数据结构,使键数组的值如下:
{
quiz: {
algorithm_id_1: [2,3],
algorithm_id_1: [1,6],
...
}
}
为此,您需要修改更新数据结构的方式
基本上,您需要检查对象是否已经有一个名为“algorithm_id_1”的键,如果没有,则添加该键,并使用用户输入的值将其值设置为一个数组。如果它确实存在,则将新输入的值推送到现有数组
在您的示例中,每次发生更改时都要创建地图,这并不理想,但我在这里不讨论这一点
jQuery(":input").change(function() {
for (var i = 0; i < allInputs.length; i++) {
// localStorage.setItem(i, allInputs[i].value);
// this is the part your question seems to be concerned with
var map = {};
var key = allInputs.get(i).id
var val = allInputs[i].value;
// if the key already exists in the map
if(map[key]){
map[key].push(val)
} else { // otherwise add it and set its value to an array of 1 entry
map[key] = [val]
}
// this should now be an object of key values where the values are arrays
console.log(keys)
}
});
jQuery(“:input”).change(函数(){
对于(变量i=0;i
我实际上无法用jquery代码测试这个示例,但是我相信它应该可以工作