【问题标题】:Passing JavaScript array by value按值传递 JavaScript 数组
【发布时间】:2015-08-03 12:08:13
【问题描述】:

我在按值传递数组数组时遇到问题。我使用 slice() 来传递数组的副本,但原始的仍然被修改。 这里是一个小样本:

var test = [[1,2],[3,4]];

function addElement(data) {
    $.each(data,function(v,val) {
        val.push(1)
    });
    return data;
};

addElement(test.slice());

我做错了什么?

感谢您的帮助!

【问题讨论】:

    标签: javascript arrays pass-by-value


    【解决方案1】:

    您正在制作外部数组的副本,但它仍然包含对所有相同内部数组的引用。你需要做一个深拷贝。如果你知道你只有一个包含数组的数组,你可以这样做:

    var test = [
      [1, 2],
      [3, 4]
    ];
    
    function copy(val) {
      if (Array.isArray(val)) {
        return val.map(copy);
      } else {
        return val;
      }
    }
    
    function addElement(data) {
      $.each(data, function(v, val) {
        val.push(1)
      });
      return data;
    };
    
    addElement(copy(test));
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

    【讨论】:

      猜你喜欢
      • 2017-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-06
      • 2020-05-23
      相关资源
      最近更新 更多