1

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

我有一个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

4 回答 4

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/

于 2012-06-18T16:49:39.070 回答
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) { });
于 2012-06-18T16:52:01.877 回答
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/

于 2012-06-18T16:53:28.507 回答
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) ; 
});​

这是演示

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

于 2012-06-18T16:58:49.083 回答