如何更改对象数组中的元素值

时间:2012-06-18 16:43:44

标签: javascript jquery arrays

如何更改对象数组中元素的值?下面我的示例从数组中删除一个对象,然后更改对象其余部分中的元素(数字) - 删除部分工作正常但另一部分没有 -

我有jsFiddle

代码:

var x =[
    {name : 'myname' , number : '10' , color:'green'},
    {name : 'yourname' , number : '15' , color:'blue'}
]; 

$.each(x , function(index ,value) {
    if(value.number == '10'){
        x.splice(index , 1) ; 
    } 
    else {
        x[i].number = '20' ; 
    }
    console.log(x) ; 
});​

4 个答案:

答案 0 :(得分:2)

您可以使用.map()构建一个像这样的新数组

var x =[{name : 'myname' , number : '10' , color:'green'},
  {name : 'yourname' , number : '15' , color:'blue'}] ; 

var newX = $.map(x , function(obj ,index){
    if(obj.name == 'yourname'){
        return null;
    }else{
       obj.number = '20';
       return obj; 
    }
});

console.log(newX);

演示: http://jsfiddle.net/joycse06/C3d9T/3/

答案 1 :(得分:0)

您似乎可以使用$.map()为您执行此操作。

var new_array = $.map(x, function (el) {

    if (el.number === '10') {
        // remove this
        return null;
    } else {
        // transform into something else
        el.number = '20';
        return el;
    }

});

请注意,这会创建一个新数组。您可以通过将返回值分配给旧变量来覆盖旧数组:

x = $.map(x, function (el) { });

答案 2 :(得分:0)

删除正在循环的数组元素时,需要递减循环计数器。我不确定是否可以使用jQuery的each()轻松完成。你可以使用普通的for循环:

for(var i = 0; i < x.length; i++) {
    var value = x[i];
    if(value.number == '10') {
        x.splice(i, 1); 
        i--;
    }
    else {
        value.number = '20'; 
    }
    console.log(x); 
}

这是一个演示 - http://jsfiddle.net/bFYj7/

答案 3 :(得分:0)

试试这个。

 var x =[{name : 'myname' , number : '10' , color:'green'},
       {name : 'yourname' , number : '15' , color:'blue'}] ; 

 $(x) . each(function(index ,value){
    if(value.number != undefined && value.number == '10'){
        x.splice(index , 1) ; 
    }else {
       if(value.number != undefined){
           value.number= '20' ; 
       }
    }
    console.log(x) ; 
});​

这是demo

对该对象索引使用未定义检查。