Pourquoi est-ce que lorsque je veux utiliser la fonction Push dans la fonction de réduction pour renvoyer un nouveau tableau, une erreur se produit? Cependant, lorsque j'utilise la méthode concat dans la fonction de réduction, elle retourne un nouveau tableau sans problème.
Tout ce que j'essaie de faire est de passer un tableau à la fonction de réduction et de renvoyer le même tableau.
var store = [0,1,2,3,4];
var stored = store.reduce(function(pV,cV,cI){
console.log("pv: ", pV);
return pV.Push(cV);
},[]);
Cela renvoie une erreur. Mais quand j'utilise concat:
var store = [0,1,2,3,4];
var stored = store.reduce(function(pV,cV,cI){
console.log("pv: ", pV);
return pV.concat(cV);
},[]);
Il retourne le même tableau.
Des idées pourquoi?
Push
renvoie la nouvelle longueur du tableau.
Ce dont vous avez besoin est le tableau fourni initialement.
Alors changez le code comme ci-dessous.
var store = [0, 1, 2, 3, 4];
var stored = store.reduce(function(pV, cV, cI){
console.log("pv: ", pV);
pV.Push(cV);
return pV; // ********* Important ******
}, []);
concat
renvoie le nouveau tableau combinant les éléments du tableau fourni et des éléments concaténés. alors ça marche.
Par souci d’exhaustivité, et pour la personne suivante sur cette question, ce que vous faites est généralement réalisé avec map
qui, comme indiqué dans la documentation
map appelle une fonction de rappel fournie une fois pour chaque élément d'un tableau, dans l'ordre, et construit un nouveau tableau à partir des résultats
Comparez cela avec la description de reduce
:
La méthode reduction () applique une fonction sur un accumulateur et sur chaque valeur du tableau (de gauche à droite) pour le réduire à une valeur unique.
Donc, bien que vous pouvez manipuliez reduce
pour renvoyer un nouveau tableau, il est d'usage courant de réduire un tableau à une valeur unique.
Donc pour votre code ce serait:
var store = [0,1,2,3,4];
var stored = store.map(function(pV){
console.log("pv: ", pV);
return pV;
});
Beaucoup plus simple que d'essayer de reconstruire un nouveau tableau en utilisant Push
ou concat
dans une fonction reduce
.
Array.prototype.Push method retourne la nouvelle longueur du tableau.
Array.prototype.concat method insère un nouvel élément dans un tableau et renvoie le tableau afin qu’il puisse être traité ultérieurement. C’est ce que vous devez faire avec une réduction: passer un tableau modifié à la prochaine itération.
la réduction peut être utile si vous devez renvoyer un tableau contenant plusieurs éléments pour chaque élément itéré.
var inputs = media.reduce((passedArray, video) => {
passedArray.Push("-i");
passedArray.Push(video.filepath);
return passedArray;
}, []);
Ici, il est utilisé pour construire le tableau en entrée pour ffmpeg;
[{nom: "bob", chemin du fichier: "1.mp4"}, {nom: "sue", chemin du fichier: "3.mp4"}]
=> ["-i", "1.mp4", "-i", "2.mp4]