[英]Javascript Array.push method issue
我有以下代码:
function build_all_combinations(input_array){
array = [1,2,3]
limit = array.length - 1
combo = []
for(i = 0; i<= limit; i++){
splice_value = array.splice(0,1)
push_value = splice_value[0]
array.push(push_value)
console.log(array)
combo.push(array)
}
console.log(combo)
}
哪个输出:
[2, 3, 1]
[3, 1, 2]
[1, 2, 3]
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
最后一行应该是: [[2, 3, 1],[3, 1, 2],[1, 2, 3]]
我显然不对数组的工作方式有所了解。 每个单独的数组都是正确的,但是当我将它们推到组合数组时,在此过程中出现了一些故障。 它是什么?
每次将同一个数组推入组合数组时; 也就是说,所有引用都指向内存中的同一实例。 因此,当您更新一个时,实际上您已经对它们全部进行了更新。
如果需要单独的引用,则需要创建单独的数组。
shift
和slice
是您的朋友在这里:
var array = [1,2,3];
var combo = []
for(var i = 0; i<array.length; i++){
array.push(array.shift()); // remove first element (shift) and add it to the end (push)
combo.push(array.slice()); // add a copy of the current array to combo
}
jordan002已经对此行为进行了解释。
这是解决方法。
array = [1,2,3]
limit = array.length - 1
combo = []
for(i = 0; i<= limit; i++){
splice_value = array.splice(0,1)
push_value = splice_value[0];
array.push(push_value);
console.log(array);
combo.push(array.concat([]));
}
console.log(combo);
您可以将副本存储在temp
变量中。
array = [1,2,3]
limit = array.length - 1
combo = []
for(i = 0; i<= limit; i++){
splice_value = array.splice(0,1)
push_value = splice_value[0];
array.push(push_value);
console.log(array);
var temp = array.slice();
combo.push(temp);
}
console.log(combo)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.