按值传递JavaScript数组

Passing JavaScript array by value

本文关键字:数组 JavaScript 按值传递      更新时间:2023-09-26

我有一个问题通过数组数组的值。我使用slice()传递数组的副本,但原始数组仍然被修改。下面是一个小示例:

var test = [[1,2],[3,4]];
function addElement(data) {
    $.each(data,function(v,val) {
        val.push(1)
    });
    return data;
};
addElement(test.slice());

我做错了什么?

谢谢你的帮助!

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

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>