0
我做了CodeWarrior.com問題(這一個:http://www.codewars.com/dojo/katas/521c2db8ddc89b9b7a0000c1/play/javascript)。的Javascript遞歸問題
我用Python實現它首先,我的代碼工作正常,但在Javascript中,我不能得到線output.push(snail(data)); return flattenArray(this.output);
工作。以遞歸方式調用該方法似乎允許子方法編輯父方法內的變量。
我如何防止這種情況(如果這是發生了什麼)?
這裏是我的代碼:
snail = function(data) {
console.log("snail - " + data);
this.output = [];
// Get the top row
this.output.push(data.splice(0,1));
if(data.length == 0) {
return this.output;
}
// Get the right row
for(var layer=0;layer<data.length;layer++) {
this.output.push(data[layer].splice(data[layer].length - 1,1));
}
// Get the bottom row
this.output.push(data.splice(data.length - 1,1));
// Get the left row
for(var layer=0;layer<data.length;layer++) {
this.output.push(data[layer].splice(0,1));
}
if(data.length!=0) {
output.push(snail(data));
return flattenArray(this.output);
} else {
return this.output;
}
}
function flattenArray(arr) {
var r = [];
while (!arrayEqual(r, arr)) {
r = arr;
arr = [].concat.apply([], arr);
}
return arr;
}
function arrayEqual(a, b) {
var i = Math.max(a.length, b.length, 1);
while(i-- >= 0 && a[i] === b[i]);
return (i === -2);
}
function clone(obj) {
if (null == obj || "object" != typeof obj) return obj;
var copy = obj.constructor();
for (var attr in obj) {
if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr];
}
return copy;
}
是什麼'this'你的蝸牛功能裏面是什麼意思?如若'output.push(蝸牛(數據));'是'this.output.push(蝸牛(數據));'我想你誤會了'this'這裏 –
'output.push(蝸牛(數據)) ;'調用推送一個名爲output的(可能不存在的)全局對象。既然你用'this.output'返回了一些東西,你可能需要'this.output.push(snail(data));'。 – Evan
我添加了'this.output'而不是'output'來試圖阻止這個問題。它似乎沒有影響程序的運行。 –