如何正确定位我的startA变量,以便它是我推向结果数组的第一个数组?
从我的输出结果可以看出,我推送到结果数组的第一个数组实际上是我的结束数组。
这是一个变量范围问题吗?因为,我已经预先定义了一个 startA 变量,它保存了初始起始值([1,1]),为什么输出我的 startA 变量仍然是[7,7]?这不是一个副值副本,因为它是一个原始类型而不是引用类型吗?
// Tick Toward
function tickToward(start, end) {
var startA = start;
var results = [];
results.push(startA);
for (var i = 0; i < start.length; i++) {
if (start[i] < end[i] && start[i + 1] < end[i + 1]) {
start[i] += 1;
start[i + 1] += 1;
var a = [start[i],start[i+1]];
results.push(a);
// console.log("Condition 1");
i--;
} else if (start[i] > end[i] && start[i + 1] > end[i + 1]) {
start[i] -= 1;
start[i + 1] -= 1;
var b = [start[i],start[i+1]];
results.push(b);
// console.log("Condition 2");
i--;
} else if (start[i] > end[i] && start[i + 1] < end[i + 1]) {
start[i] -= 1;
start[i + 1] += 1;
var c = [start[i],start[i+1]];
results.push(c);
// console.log("Condition 3");
i--;
} else if (start[i] < end[i] && start[i + 1] > end[i + 1]) {
start[i] += 1;
start[i + 1] -= 1;
var d = [start[i],start[i+1]];
results.push(d);
// console.log("Condition 4");
i--;
} else if (start[i] > end[i] && start[i + 1] == end[i + 1]) {
start[i] -= 1;
var e = [start[i],start[i+1]];
results.push(e);
// console.log("Condition 5");
i--;
} else if (start[i] < end[i] && start[i + 1] == end[i + 1]) {
start[i] += 1;
var f = [start[i],start[i+1]];
results.push(f);
// console.log("Condition 6");
i--;
} else if (start[i] == end[i] && start[i + 1] > end[i + 1]) {
start[i + 1] -= 1;
var g = [start[i],start[i+1]];
results.push(g);
// console.log("Condition 7");
i--;
} else if (start[i] == end[i] && start[i + 1] < end[i + 1]) {
start[i + 1] += 1;
var h = [start[i],start[i+1]];
results.push(h);
// console.log("Condition 8");
i--;
}
} console.log(results);
}
tickToward([1, 1], [7, 7]); // Output should be [ [ 1, 1 ], [ 2, 2 ], [ 3, 3 ], [ 4, 4 ], [ 5, 5 ], [ 6, 6 ], [ 7, 7 ] ]
// However, my output is [ [ 7, 7 ], [ 2, 2 ], [ 3, 3 ], [ 4, 4 ], [ 5, 5 ], [ 6, 6 ], [ 7, 7 ] ]
以下是有兴趣的人提出的问题: http://i.stack.imgur.com/5UR5T.png
答案 0 :(得分:2)
这不是一个副值副本,因为它是原始类型而不是引用类型吗?
var startA = start;
此行导致问题。它创建了一个引用而不是单个副本。
您需要使用&#39; slice()&#39;这将克隆数组。
var startA = start.slice();
<强> Demo 强>