我在分配数组时遇到问题:
var obj = [ {'id': 1, 'size': 'king' }, {'id':4, 'size': 'queen'} ];
function modify(o){
var result=[{'id': 1, 'size': 'king'}];
o=result.slice();
}
modify(obj);
document.write("result:" + JSON.stringify(obj)); //obj both 'king and queen'
我想'obj'填充'result'数组中的数据,但这种方法不起作用。可以使数组为空并更改其内容,如下所示:
o.length=0;//obj is empty outside of the function
o[1].id = 100;//id is changed outside of the function
我知道我可以通过返回'result'数组并将其分配到t'obj'之外来做到这一点,但是在函数中会有更多这样的关联。 任何帮助,将不胜感激。感谢
答案 0 :(得分:0)
如果您希望在函数中进行赋值,有两种方法可以解决此问题。您可以更改obj的内容并执行将其作为参数传递的简洁方式:
var obj = [ {'id': 1, 'size': 'king' }, {'id':4, 'size': 'queen'} ];
function modify(o){
var result=[{'id': 1, 'size': 'king'}];
o.length = 0;
o.push.apply(o,result); // push every element from result
}
modify(obj);
console.log(obj);
或者您可以将引用更改为其他内容。在这种情况下,您必须使用实际变量,而不是函数的参数:
var obj = [ {'id': 1, 'size': 'king' }, {'id':4, 'size': 'queen'} ];
function modifyObj(){
var result=[{'id': 1, 'size': 'king'}];
obj = result.slice();
}
modify();
console.log(obj);
第二种方法的一点改进是将数组保存在一个对象中,但这会改变您在其余代码中访问它的方式:
var container = {
obj : [ {'id': 1, 'size': 'king' }, {'id':4, 'size': 'queen'} ]
};
function modify(container, key){
var result=[{'id': 1, 'size': 'king'}];
container[key] = result.slice();
}
modify(container, 'obj');
console.log(container.obj);