按值传递JavaScript数组

时间:2015-05-21 17:12:22

标签: javascript arrays pass-by-value

按值传递数组数组时出现问题。我使用slice()传递数组的副本,但仍然修改了原始数据。 这是一个小样本:

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

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

addElement(test.slice());

我做错了什么?

感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

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



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>
&#13;
&#13;
&#13;