0

なぜ私がこの結果に対して未定義になり続けるのか、どんな助けも素晴らしいでしょう。結果は、先頭に x 値を持つ配列に想定されます。ありがとう

var tester = [1,2,4];
Array.prototype.cons = function(x){
    function reduce(results,y){
        if(y == 1){
            results.unshift(x);
            return results;
        }
        else{
            results.push(this[y-1]);
            y = y-1;
            reduce(results, y);
        }
    }
    return reduce([], this.length);
}
document.getElementById('test').innerHTML = tester.cons(0)
4

2 に答える 2

0

配列内の要素を前面に移動しようとしているだけの場合は、配列を再帰的に処理する代わりに、単純にこれを使用できます。

var tester = [1,2,4];
Array.prototype.cons = function(x){
    // Copy the array. This only works with simple vars, not objects
    var newArray = this.slice(0);        

    // Check to make sure the element you want to move is in the array
    if (x < this.length) {
        // Remove it from the array
        var element = newArray.splice(x, 1);
        // Add to the beginning of the array
        newArray.unshift(element);
    }
    return newArray;
}
document.getElementById('test').innerHTML = tester.cons(4)​;​

編集:配列のコピーを作成しました

于 2012-11-05T17:47:49.713 に答える
0

結果を返すreduceように関数を設計しましたが、再帰呼び出しで

else{
    results.push(this[y-1]);
    y = y-1;
    reduce(results, y);  // <--- HERE
}

返された値で何もしていません (スタックに返すなど)。これは、評価が関数の下に続き、その最後にreturnステートメントがないことを意味します。JavaScript では、return ステートメントがないということは、関数呼び出しの戻り値がundefined

于 2012-11-05T17:44:18.183 に答える