简体   繁体   English

从 Javascript 中选定的单选按钮生成数组?

[英]Generating an array from selected radio buttons in Javascript?

I'm generating some radio buttons dynamically.我正在动态生成一些单选按钮。 The end result looks like this:最终结果如下所示:

<div>Question 1:</div>
<input type="radio" name="1" value="1">Yes
<input type="radio" name="1" value="0">No

<div>Question 2:</div>
<input type="radio" name="2" value="1">Yes
<input type="radio" name="2" value="0">No

<div>Question 3:</div>
<input type="radio" name="3" value="1">Yes
<input type="radio" name="3" value="0">No

I need to create an Array from the selected radio buttons that looks like this:我需要从选定的单选按钮创建一个数组,如下所示:

"someName": {
        "1": "1",
        "2": "0"
    }

I tried the following but the created array is not what I want:我尝试了以下操作,但创建的数组不是我想要的:

let names = ["1","2","3"]
let results = [];

document.querySelector("button").addEventListener("click", function(event){
  results = names.map(function(el){
    return document.querySelector("input[name='" + el + "']:checked").value;
  });
  
  console.log(results);
});

This will create an array like this:这将创建一个这样的数组:

[
  "1",
  "2",
  "3"
]

How can I achieve the array I want?我怎样才能实现我想要的数组?

results needs to be an object in order to support any key-value pairs, otherwise you were VERY close to a solution, see this: results必须是一个对象才能支持任何键值对,否则您非常接近解决方案,请参阅:

 let names = ["1","2","3"] let results = {}; document.querySelector("button").addEventListener("click", function(event){ /*results = names.map(function(el){ return document.querySelector("input[name='" + el + "']:checked").value; });*/ results = {}; for (let name of names) { let item = document.querySelector("input[name='" + name + "']:checked"); if (item) { //Something was checked results[name] = item.value; } } console.log(results); });
 <div>Question 1:</div> <input type="radio" name="1" value="1">Yes <input type="radio" name="1" value="0">No <div>Question 2:</div> <input type="radio" name="2" value="1">Yes <input type="radio" name="2" value="0">No <div>Question 3:</div> <input type="radio" name="3" value="1">Yes <input type="radio" name="3" value="0">No <button type="button">DO IT!</button>

Using a little magic from more recent versions of JavaScript can make this a bit more compact.使用来自较新版本的 JavaScript 的一些魔法可以使这更紧凑一些。 See comments in the code for line-by-line explanation.有关逐行解释,请参阅代码中的注释。

Documentation:文档:

 // querySelector gets the first item that matches the selector document.querySelector('#check').addEventListener('click', function (e) { console.log( // Object.fromEntries takes an array like [[name1, value1],[name2, value2]] and turns // it into { name1: value1, name2: value2 } Object.fromEntries( // Give it an array of all of the radio buttons Array.from(document.querySelectorAll('input[type="radio"]')) // map that to an array of the name, value, and whether it is checked or not .map(el => ([el.name, el.value, el.checked])) // filter out the checked ones .filter(([name, value, checked]) => checked) // map to an array of name/value pairs for Object.fromEntries .map(([name, value, checked]) => ([name, value])) ) ); });
 <div>Question 1:</div> <label><input type="radio" name="1" value="1">Yes</label> <label><input type="radio" name="1" value="0">No</label> <div>Question 2:</div> <label><input type="radio" name="2" value="1">Yes</label> <label><input type="radio" name="2" value="0">No</label> <div>Question 3:</div> <label><input type="radio" name="3" value="1">Yes</label> <label><input type="radio" name="3" value="0">No</label> <div> <button type="button" id="check">Go</button> </div>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM