Javascript在执行数组'push'时给数组键命名

时间:2014-01-28 12:58:48

标签: javascript jquery

我有3组单选按钮,每组包含多个单选按钮。虽然我可以确保每个组在bootstrap3中使用data-toggle="buttons",但每个组只选择一个答案。到目前为止一切正常。

下面的函数在click事件中触发并返回所选项的值。我的问题是如何处理存储在数组values中的返回值,并为每个键赋予一组与按钮组对应的名称。

假设我选择了Red + small + Circle,那么getValues将返回密钥=>价值观:

  • [0] =>红色
  • [1] =>小
  • [2] =>圆

现在,如果我选择small + Circle

  • [0] =>小
  • [1] =>圆

值按照选择的顺序存储,我试图获取此值以根据选择构建查询..

我希望以这种格式存储值:

  • [color] => x
  • [size] => ÿ
  • [shape] => ž

d

<input type="radio" name="color" value="red"/> Red     /// Grp 1 Color
<input type="radio" name="color" value="blue"/> Blue
<br/>
<input type="radio" name="size" value="small"/> small   /// Grp2  Size
<input type="radio" name="size" value ="Large"/> Large
<br/>
<input type="radio" name="shape" value="circle"/> Circle  /// Grp3 Shape
<input type="radio" name="shape" value="square"/> Square


function getValues(){

var values = [];
for(var x = 0; x < radios.length; x++){
    if(radios[x].type == "radio" && radios[x].checked){
       values.push(radios[x].value);
    }
}
return values;

}

$( "#Btn" ).click(function() {
      var x = getValues();

$.each(x, function(k, v) {

//display the key and value pair
      alert(k + ' is ' + v);

});

由于

5 个答案:

答案 0 :(得分:1)

如前所述,JS中的数组处理方式不同。你真正想要的是一个Hash Table ......这只是一个对象(有点像)。

您可以使用的技术是创建一个类似于Array的对象,其中包含名称作为键和索引。

重要的是要注意,这不是一个功能齐全的数组对象,因为它没有实现push,pop,slice等...

var values = {},
    length = 0;

for(var x = 0; x < radios.length; x++){
    if(radios[x].type == "radio" && radios[x].checked){
        //Assign the name as a key on the object
        values[radios[x].name] = radios[x].value;

        //Also assign the index as a key
        values[x] = radios[x].value;

        length += 1;
    }
}

values.length = length;

return values;

那么这对你有什么作用呢?

嗯,它允许您按键访问各个项目:

values['bob'];

它还允许您通过索引访问它们:

values[0];

更好的是,您可以使用普通for循环迭代它们:

for(var i = 0; i < values.length; i++){
   //I act just like an array!!
   values[i];
}

答案 1 :(得分:1)

试试这个。

LIVE DEMO

我认为在Javascript中可以使用Associate数组。

http://www.i-programmer.info/programming/javascript/1441-javascript-data-structures-the-associative-array.html

<input type="radio" name="color" class="radioGrp" value="red"/> Red  
<input type="radio" name="color" class="radioGrp" value="blue"/> Blue
<br/>
<input type="radio" name="size" class="radioGrp" value="small"/> small
<input type="radio" name="size" class="radioGrp" value ="Large"/> Large
<br/>
<input type="radio" name="shape" class="radioGrp" value="circle"/>circle
<input type="radio" name="shape" class="radioGrp" value="square"/>square

<input type='button' id="Btn" />


function getValues(){

var values = [];
var radios = document.getElementsByClassName("radioGrp");
    console.log(radios);

for(var x = 0; x < radios.length; x++){
    if(radios[x].type == "radio" && radios[x].checked){
       values[radios[x].name] = (radios[x].value);
    }
}
  return values;
}

$("#Btn").click(function() {
      var x = getValues();

     alert(x["color"]);
     alert(x["size"]);
     alert(x["shape"]);

     for(var prop in x ){
       alert( prop + " is " + x[prop] );
     }

});

您不能将$ .each用于asscioate数组以获取更多详细信息http://bugs.jquery.com/ticket/4319

答案 2 :(得分:0)

请使用以下代码:

    function getValues(){

    var values = [];
    for(var x = 0; x < radios.length; x++){
        if(radios[x].type == "radio" && radios[x].checked){
            var tmp={};
            tmp[radios[x].name]=radios[x].value;  
           values.push(tmp);
        }
    }
    return values;

    }

    $( "#Btn" ).click(function() {
          var x = getValues();

    $.each(x, function(k, v) {

    //display the key and value pair
          alert(k + ' is ' + v);

    });

答案 3 :(得分:0)

下面的示例代码将所有选中的复选框作为数组

// A function that return an array with the selected items
function getSelected() {

  var selected = [];

  var checkboxes = $('input[type=checkbox]:checked');

  for(var i = 0; i < checkboxes.length; i++){
     if(checkboxes[i].checked){
        selected.push(checkboxes[i].value);
     }
  }

  return selected;

}

请注意,这与jQuery一起工作。

答案 4 :(得分:0)

您的代码可能符合以下要求:

<script>
function getValues() {
  var values={};
  var inputs = document.getElementsByTagName("input");
  console.log(inputs);
  for (var i=0;i<inputs.length;++i) 
     if (inputs[i].type==="radio" && inputs[i].checked) 
        values[inputs[i].name]=inputs[i].value;
 console.log(values);
}
</script>
<button onclick="getValues()">Hit me</button>

我知道这不是jQuery - 但你应该能够转换它:)

这将创建一个对象,您可以从中按正确的顺序选择键值对:

[ values.color||"default", values.size||"default", values.shape||"default" ]