将本地创建的数组在函数中分配给全局定义的数组javascript

时间:2014-03-07 14:04:42

标签: javascript arrays

我在分配数组时遇到问题:

    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'之外来做到这一点,但是在函数中会有更多这样的关联。 任何帮助,将不胜感激。感谢

1 个答案:

答案 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);
相关问题