按值传递数组数组时出现问题。我使用slice()传递数组的副本,但仍然修改了原始数据。 这是一个小样本:
var test = [[1,2],[3,4]];
function addElement(data) {
$.each(data,function(v,val) {
val.push(1)
});
return data;
};
addElement(test.slice());
我做错了什么?
感谢您的帮助!
答案 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;