2017-04-08 2 views
1

Ich habe diese Funktion namens SuperPower, die ein Array von Zahlen nimmt und eine Zahl zurückgibt. Diese Zahl wird erstellt, indem jedes Element, das mit 10 multipliziert wird, mit der Potenz seiner Indexposition in dem Array verwendet wird, und dann jedes Element zusammengefügt wird.SuperPower-Funktion von ES5 bis ES6

es6

ArrayFunctions.superPower = function(array){ 
return array.reduce(function(sum, number, index){ 
return sum + (number * (Math.pow(10, index))); 
}); 
}; 

Dies ist, was Dies ist die ES5 Version I Refactoring muss ich bisher versucht, aber es funktioniert nicht:

static superPower (array) { 
    return array.reduce(((sum, number, index) => sum + number + index) { 
    return (sum + (number => number ** (10, index))); 
    }); 
} 

Finden Sie den vollständigen Code unten :

class ArrayFunctions { 
 
    constructor() { 
 
    } 
 
    static printSpecial (array) { 
 
    return array.join(" --- "); 
 
    } 
 
    static doubleArray (array) { 
 
     return array.map(number => number * 2); 
 
    } 
 
    static superPower (array) { 
 
    // return array.reduce(((sum, number, index) => sum + number + index); { 
 
    //  return sum + (number * (Math.pow(10, index))); 
 
    // }); 
 
    } 
 
} 
 

 
// Method to refactor 
 

 
ArrayFunctions.superPower = function(array){ 
 
    return array.reduce(function(sum, number, index){ 
 
    return sum + (number * (Math.pow(10, index))); 
 
    }); 
 
}; 
 

 
// Here I am testing how to refactor it 
 
// ArrayFunctions.superPower = function(array){ 
 
// return array.reduce(((sum, number, index) => sum + number + index) { 
 
// return (sum + (number => number ** (10, index))); 
 
// }); 
 
// };

+0

ich werde den ganzen Kontext zu machen, können Sie ein re right @mplungjan – randseed1724

+0

@RobG Ich habe nur einen Ausschnitt hinzugefügt, um Ihnen den ganzen Zusammenhang zu zeigen. Ich teste mein Refactoring außerhalb des Klassenkörpers, bevor es funktioniert. Nachdem es funktioniert habe, werde ich den Code delattieren und zum Klassenkörper hinzufügen. – randseed1724

+1

Was ist die erwartete Verbesserung von ES5 zu 6 anders als nicht in älteren Browsern funktioniert – mplungjan

Antwort

1

Es ist wie:

ArrayFunctions.superPower = function(array){ 
return array.reduce((sum, number, index) => { 
    return sum+number*Math.pow(10, index); 
}); 
} 
+0

Danke, das ist genau das, was ich gesucht habe! – randseed1724

+0

@ randseed1724 Sie sollten eine Antwort akzeptieren, wenn keine weitere Hilfe benötigt wird. – gyre

+0

@gyre fertig, ty! – randseed1724

0

Ich denke, was Sie suchen ist:

ArrayFunctions = {}; 
 
ArrayFunctions.superPower = (array => array.reduce(
 
    (sum, number, index) => sum + number * 10 ** index), 0) 
 
); 
 

 
console.log(ArrayFunctions.superPower([1,2,3]));

Das wird nicht in meinem aktuellen Safari laufen, da es nicht der Fall ist Unterstütze die Exponentiation Operator **, ich brauche zu verwenden:

ArrayFunctions = {}; 
 
ArrayFunctions.superPower = (array => array.reduce(
 
    (sum, number, index) => sum + number * Math.pow(10, index), 0) 
 
); 
 

 
console.log(ArrayFunctions.superPower([1,2,3]));

Wird in einer Klassendeklaration eine Rückkehr erforderlich ist, wie Sie Pfeil Funktionen nicht statische Methoden definieren können:

class ArrayFunctions { 
 
    constructor(){} 
 

 
    static superPower (array) { 
 
    return array.reduce((sum, number, index) => sum + number * Math.pow(10, index),0); 
 
    } 
 
} 
 

 
console.log(ArrayFunctions.superPower([1,2,3]));

Allerdings, wenn Klasse Syntax einfach verwendet werden, um Methoden eines Objekts zu erstellen, dann ist es schwer, es zu rechtfertigen:

var arrayFunctions = { 
 
    superPower : (array) => array.reduce((sum, number, index) => sum + number * Math.pow(10, index), 0) 
 
}; 
 
    
 
console.log(arrayFunctions.superPower([1,2,3]));

+0

Eigentlich [link] (http://stackoverflow.com/users/2438423/phpglue) habe es richtig gemacht. – randseed1724

+0

Das hängt von Ihren Kriterien für "richtig" ab. Wenn Sie Pfeilfunktionen verwenden, müssen Sie (in diesem Fall) * return * nicht verwenden, da die einzeiligen Funktionen standardmäßig den Wert ihrer Anweisung zurückgeben. Und das Schlüsselwort * function * ist auch nicht nötig. – RobG

+0

Ja, aber bedenke, dass mein Schweinswal es im Klassenkörper benutzen soll. Ich kann deine Lösung nicht innerhalb des Klassenkörpers verwenden, es funktioniert nicht. – randseed1724

0

Ich habe den folgenden Code in meiner Klasse Körper und es funktionierte perfekt:

return array.reduce((sum, number, index) => { 
return sum+number*Math.pow(10, index); 

jetzt ist es dies wie:

class ArrayFunctions { 
constructor() { 
} 
    static printSpecial (array) { 
    return array.join(" --- "); 
    } 
    static doubleArray (array) { 
    return array.map(number => number * 2); 
    } 
    static superPower (array) { 
    return array.reduce((sum, number, index) => { 
    return sum+number*Math.pow(10, index); 
}); 
} 
} 

module.exports = ArrayFunctions; 

Danke @PHPglue

+0

Die Annahme der zuvor gegebenen Antwort ist wahrscheinlich ausreichend. –

+0

@DaveNewton Was genau meinst du oder schlägst du vor? – randseed1724

0

Niemals ein 01 verwendenmit static funktioniert nur, verwenden Sie ein Objektliteral!(Oder einfach nur genannt Exporte verwenden, wenn Sie das Modul Objekt auf Standard-Export wollte)

Code sollte

const ArrayFunctions = { 
    printSpecial(array) { 
    return array.join(" --- "); 
    } 
    doubleArray(array) { 
    return array.map(number => number * 2); 
    } 
    superPower(array) { 
    return array.reduce((sum, number, index) => 
     sum + number * 10 ** index; 
    ); 
    } 
}; 

Hinweis geworden, dass Sie auch die Effizienz des Codes verbessern, indem eine reduceRight stattdessen tun die reduce, und indem 0 für den Start, die Zuverlässigkeit zu verbessern, so dass die Funktion 0 statt wirft eine Ausnahme gibt:

return array.reduceRight((acc, number) => number + 10 * acc, 0); 
Verwandte Themen