我正在尝试制作一个接受数组的函数,并打印缺少一个数字的数组版本。例如,如果数组为[1,2,3]
,它将打印[2,3]
,[1,3]
,[1,2]
。因此,我要创建一个变量tempSeq
,将其设置为等于Sequence
,用Document.write()
打印,然后将tempSeq
重置为原始sequence
。但是由于某种原因,变量sequence
被拼接了。不知道为什么会这样,将不胜感激!
function almostIncreasingSequence(sequence) {
var tempseq = sequence;
for (let i = 0; i < sequence.length; i++) {
tempseq = sequence;
tempseq.splice(i, 1);
document.write("(" + tempseq + ")");
}
return tempseq;
}
almostIncreasingSequence([10, 1, 2, 3, 4, 5]);
函数名称很奇怪,因为最终该函数还会执行其他操作。
答案 0 :(得分:2)
此行实际上是在说“将“序列”数组也称为“ tempseq””
var tempseq = sequence;
,这并不是说将“序列”数组克隆到“ tempseq”中(如果您期望这种行为)。然后拼接实际上在sequence
数组上进行操作
tempseq.splice(i, 1); // equal to sequence.splice(i, 1)
只需克隆数组:
// instead of
// var tempseq = sequence;
var tempseq = sequence.slice();
function almostIncreasingSequence(sequence) {
var tempseq = sequence.slice();
for (let i = 0; i < sequence.length; i++) {
tempseq = sequence;
tempseq.splice(i, 1);
document.write("(" + tempseq + ")");
}
return tempseq;
}
almostIncreasingSequence([10, 1, 2, 3, 4, 5]);
答案 1 :(得分:0)
当您分配tempseq =序列tempseq仍然是同一数组时,它只是一个引用,因此拼接会同时影响两者。使用reduce可以创建数组的副本,而不在i处添加项目
function almostIncreasingSequence(sequence) {
var tempseq = sequence;
for (let i = 0; i < sequence.length; i++) {
const tempseq = sequence.reduce((results, item, index) => index === i ? results : [...results, item], []);
document.write("(" + tempseq + ")");
}
return tempseq;
}
almostIncreasingSequence([10, 1, 2, 3, 4, 5]);