2015-08-14 33 views
0

这里是我的数组改变数组对象的值

Array1 = [{year: "2013", fruit: "banana", quantity: 1},{year: "2014", fruit: "orange", quantity: 1},{year: "2014", fruit: "banana", quantity: 2}] 

而我的功能来复制数组1:

var Array2 = Array1; 
for (var i = 0, len = Array1.length; i < len; i++) { 
    Array2[i] = Array1[i]; 
} 

但我想在数组2中的所有值我的钥匙改变“年”,并把值“AllYear”:

Array2 = [{year: "AllYear", fruit: "banana", quantity: 1},{year: "AllYear", fruit: "orange", quantity: 1},{year: "2014", fruit: "banana", quantity: 2}] 

回答

2

使用map,但一定要返回一个新的对象:

var Array2 = Array1.map(function (el) { 
    return { fruit: el.fruit, year: 'AllYear', quantity: el.quantity } 
}); 

DEMO

+1

这将改变IMO两个数组。 – webduvet

+0

@webduvet,修好了 - 谢谢。 – Andy

0

// JS

var Array2 = Array1 
    for (var i = 0, len = Array1.length; i < len; i++) { 
    Array2[i].year = "AllYear"; 
} 

参考此解决方案:Jsfiddle

我希望这将有助于!

+0

这将修改原始数组,因为'Array2'和'Array1'指向完全相同的数组。 –

0

你可以像这样

Array2 = Array1.slice(0); //copy array1 elements to array2 
Array2 = Array2.map(function (el) { 
var copy = {}; 
for (var attr in el) { 
     if (el.hasOwnProperty(attr)) copy[attr] = el[attr]; 
    } 
    copy.year = 'AllYear'; 
    return copy ; 
}); 
+0

奇怪[这不起作用](http://jsfiddle.net/2mz08ybj/1/) – Andy

+0

是的,它不会每个对象都克隆 – Raghavendra

+0

只是给出的想法 – Raghavendra

0
var Array2 = Array1; 
$.each(Array2,function(index,value) { 
    value.year = "AllYear"; 
});//returns what you excepted 
+0

是的,但是1,2指向同一个loc的 – Raghavendra

+0

虽然这段代码可能回答这个问题,但最好包含一些上下文,解释它是如何工作的,并描述何时使用它。从长远来看,仅有代码的答案是没有用的。 – ryanyuyu