js对象问题

时间:2011-03-03 15:11:22

标签: javascript object

我使用一个对象来检查一组单选按钮是否具有像“rule”对象上设置的精确值。这是一个例子:

arr = {a:"1", b:"1", c:"1", c:"2"}; //that's my object rule

var arr2={}; //here  I create my second array with charged value 
$("#form_cont input:checked").each(function()
{
    arr2[$(this).attr("name")]=$(this).val();
});
//here I make the check
for (k in arr2)
{
    if (typeof arr[k] !== 'undefined' && arr[k] === arr2[k]) 
    {
        $("#form_cont li[name$='"+k+"']").css('background-color', '');
    }
    else
    {
        $("#form_cont li[name$='"+k+"']").css('background-color', 'pink');
    }
}

问题是,当我必须检查“c”键时,我得到最后一个(2)而不是正确的值,这可能是e 1还是2

提前致谢

ciao,h。

2 个答案:

答案 0 :(得分:2)

为了拥有多个值,arr的属性c将需要是一个数组:

arr = {a:["1"], b:["1"], c:["1","2"]}; //that's my object rule

当然,您的有效性检查也必须更改为搜索新阵列:

typeof arr[k] !== 'undefined' && contains(arr[k], arr2[k])

...

function contains(a, obj){
  for(var i = 0; i < a.length; i++) {
    if(a[i] === obj){
      return true;
    }
  }
  return false;
}

答案 1 :(得分:0)

您不能在名称相同的对象上拥有两个属性。因此,当javascript编译器看到行arr = {a:"1", b:"1", c:"1", c:"2"};时,它会自动将其更改为arr = {a:"1", b:"1", c:"2"};,让c的最后一个定义覆盖第一个