Implementa la reducció de matriu

Bloc

Implementa la reducció de matriu

Preguntes directes com què és un Array reduce? gairebé no se'ls demana a les entrevistes Javascript. Però és possible que se us demanin problemes en què haureu d'aplicar Array reduce. És important saber on necessiteu exactament una reducció de matriu a Javascript. Se us jutjarà per la forma d’aplicar-lo.



s'ha canviat la contrasenya del vostre compte de mojang

Comencem amb una resum del mètode Array reduce a Javascript. No dubteu a ometre aquesta secció, si ja sabeu com funciona.

Què és un mètode de reducció de matriu a Javascript?

reduce és un mètode disponible per a totes les matrius de Javascript. Com el seu nom indica, s’utilitza per reduir la matriu a un valor únic. No muta la matriu. Passa per la matriu i genera un valor reduït únic. Cada iteració pren la sortida de la iteració anterior i realitza l'operació subministrada utilitzant aquest valor i el valor actual. Podem passar un valor de llavor a la primera iteració. Si no ho fem, l’element de l’índex 0 es pren com a valor inicial i el bucle comença a partir de l’índex 1.



arr.reduce(callback, accumulator); // callback - The function that defines what you want to do with the currentValue & the accumulated value // accumulator - The seed value. If not provided, value of first array element is taken as the seed value

La funció de devolució de trucada rep 4 paràmetres:

// callback (accumulator, currentValue, currentIndex, arr) => {}
  • acumulador: Valor acumulat. Per començar, és igual al valor de l’acumulador proporcionat, en cas contrari, el valor del primer índex de la matriu.
  • currentValue: valor de l’índex actual
  • currentIndex: índex actual
  • arr: Matriu en què es va cridar reduce
const numbers = [1, 2, 3, 4]; const sum = numbers.reduce((total, value) => total + value); console.log(sum); // -> prints 10 const numbers = [2, 3, 4, 8]; const product = numbers.reduce((total, value) => total * value, 2); console.log(product); // -> prints 384

Implementació Reduce

A continuació, veiem una implementació senzilla de array reduce a javascript. Comencem pels casos de prova:



// With empty Array and no initial value specified // Expect a type error [].reduce((total, value) => total * value) // With empty Array but has initial value // Returns initial value [].reduce((total, value) => total * value, 2) // Happy case // Returns 384 [2, 3, 4, 8].reduce((total, value) => total * value, 2) // Callback not provided // Expect a type error [2, 3, 4, 8].reduce() // Check if reduce does not already exist so that you don't override it if (!Array.prototype.myReduce) { // Add a reduce method to prototype so that it is available to all arrays Array.prototype.myReduce = function (callback, acc) { // Check if callback is a function if(typeof callback !== 'function') { throw new TypeError('Callback is not a function') } // Check if reduce called on empty array without providing initial value if (this.length === 0 && typeof acc === 'undefined') { throw new TypeError('Reduce of empty array with no initial value'); } var accumulator = typeof acc === 'undefined' ? this[0] : acc; var i = acc ? 0 : 1; for (; i

Necessitem un parell de controls aquí:

  1. Si es proporciona la devolució de trucada

  2. Si no es va cridar reducció en una matriu buida sense cap valor inicial proporcionat

En els dos casos anteriors, hauria de llançar un TypeError. Un TypeError significa bàsicament que l'operant o l'argument subministrat no eren del tipus esperat.

A continuació, comprovem si es proporciona o no un valor inicial. Si és així, ho prenem com a valor de llavor i comencem a fer un bucle des de l’índex 0, en cas contrari considerem el primer element de matriu com el valor de llavor i iniciem el bucle des de l’índex de matriu 1.

Amb cada iteració, fem una trucada a la devolució de trucada amb els paràmetres adequats mentre actualitzem l’acumulador.

Finalment torneu a tornar l’acumulador. Això és.

Aquesta implementació hauria de ser prou bona per a la majoria de les entrevistes javascript júnior - mitjana. El 95% dels entrevistadors estarien contents amb aquesta implementació.

Per als rols superiors que impliquen escriure biblioteques bàsiques, la implementació pot necessitar algunes coses addicionals:

  1. Com s'utilitza aquesta implementació per a casos amb Array.prototype.myReduce.call (...)

  2. Podeu millorar aquesta implementació per a matrius disperses? Aquí fem un recorregut per tots els elements de la matriu. Fer això per a matrius disperses no és performant. Com ho solucionem?

#arrays #coding #java #css

js-interview.com

Implementa la reducció de matriu

Suposant que Javascript no té un mètode de reducció de matriu, com implementaríeu un? O, dit d’una altra manera, implementar un polyfill per reduir matrius a Javascript.