2012-06-18 59 views
1

如何更改對象數組中元素的值?下面我的例子從數組中刪除一個對象,然後在該對象的其餘部分改變元素(數) - 除去部分工作正常,但另一部分doesn't-如何更改對象數組中的元素值

我有一個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) ; 
});​ 
+1

請張貼正常縮進的代碼來幫助人們幫助你。編寫可讀代碼還可以幫助您維護代碼。 – kapa

回答

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/

+0

+1這是正確的方法 – kapa

0

看起來像你可以使用$.map()爲你做這個。請注意,這將創建一個新的數組。您可以通過分配返回舊變量覆蓋舊的陣列:

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

你需要刪除你的循環數組的元素時遞減循環計數器。我不確定這是否可以通過jQuery的each()輕鬆完成。你可以只用一個正常的循環:

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/

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

使用該對象的索引未定義的檢查。

相關問題