Maison interface Web js tutoriel Utilisation pertinente du tableau js réduit

Utilisation pertinente du tableau js réduit

Jun 13, 2018 pm 02:24 PM
js数组

Cet article a compilé de nombreux extraits de code classiques sur la méthode de tableau js réduire, qui peuvent vous aider à mieux comprendre l'utilisation des exemples de réduction. Étudions ensemble.

Voici quelques extraits de code pertinents sur la méthode de tableau JavaScript reduce que j'ai collectés et résumés au travail. Je les ajouterai les uns après les autres lorsque je rencontrerai d'autres scénarios où cette fonction est utilisée. un mémo. Il existe tellement de méthodes pour les tableaux

javascript. Pourquoi est-ce que je choisis la méthode reduce L'une des raisons est que je n'en connais pas suffisamment pour l'utiliser comme je l'aime. D’un autre côté, je ressens aussi le charme immense de cette méthode, qui joue un rôle magique dans de nombreuses scènes.

ComprendrereduceFonction

La méthode réduire() reçoit une fonction en tant qu'accumulateur (accumulateur), et chaque valeur du tableau (de gauche à droite) commence à diminuer, et enfin devient une valeur.

arr.reduce([callback, initialValue])
Copier après la connexion

Regardez l'exemple suivant :

let arr = [1, 2, 3, 4, 5];

// 10代表初始值,p代表每一次的累加值,在第一次为10
// 如果不存在初始值,那么p第一次值为1
// 此时累加的结果为15
let sum = arr.reduce((p, c) => p + c, 10); // 25
// 转成es5的写法即为:
var sum = arr.reduce(function(p, c) {
 console.log(p);
 return p + c;
}, 10);
Copier après la connexion

Fragment 1 : Jeu de l'alphabet

const anagrams = str => {
 if (str.length <= 2) {
  return str.length === 2 ? [str, str[1] + str[0]] : str;
 }
 return str.split("").reduce((acc, letter, i) => {
  return acc.concat(anagrams(str.slice(0, i) + str.slice(i + 1)).map(val => letter + val));
 }, []);
}

anagrams("abc"); // 结果会是什么呢?
Copier après la connexion

reduce Responsable du filtrage de la première lettre de chaque exécution, et la récursivité est responsable de l'arrangement et de la combinaison des lettres restantes.

Fragment 2 : Accumulateur

const sum = arr => arr.reduce((acc, val) => acc + val, 0);
sum([1, 2, 3]);
Copier après la connexion

Fragment 3 : Compteur

const countOccurrences = (arr, value) => arr.reduce((a, v) => v === value ? a + 1 : a + 0, 0);
countOccurrences([1, 2, 3, 2, 2, 5, 1], 1);
Copier après la connexion

Parcourez le tableau. Chaque fois qu'une valeur est égale à la valeur donnée, 1 est ajouté et le résultat après l'ajout est utilisé comme valeur initiale pour la prochaine fois.

Fragment 4 : Currying de fonctions

Le but du currying de fonctions est de stocker des données puis de les exécuter dans la dernière étape.

const curry = (fn, arity = fn.length, ...args) => 
 arity <= args.length ? fn(...args) : curry.bind(null, fn, arity, ...args);
curry(Math.pow)(2)(10);
curry(Math.min, 3)(10)(50)(2);
Copier après la connexion

Obtenez le length de la fonction actuelle en jugeant les paramètres de la fonction (bien sûr, vous pouvez également le spécifier vous-même Si les paramètres passés sont inférieurs aux paramètres actuels, continuez à récurer). ci-dessous et stockez le dernier paramètre passé.

Fragment 5 : Aplatissement du tableau

const deepFlatten = arr => 
 arr.reduce((a, v) => a.concat(Array.isArray(v) ? deepFlatten(v) : v), []);
deepFlatten([1, [2, [3, 4, [5, 6]]]]);
Copier après la connexion

Fragment 6 : Génération du tableau Fiboletsch

const fibonacci = n => Array(n).fill(0).reduce((acc, val, i) => acc.concat(i > 1 ? acc[i - 1] + acc[i - 2] : i), []);
fibonacci(5);
Copier après la connexion

Fragment 7 : Processeur de tuyaux

const pipe = (...funcs) => arg => funcs.reduce((acc, func) => func(acc), arg);
pipe(btoa, x => x.toUpperCase())("Test");
Copier après la connexion

En effectuant un traitement de fonction sur les paramètres passés, après utiliser les données traitées comme le paramètre de la fonction suivante et transmettez-le couche par couche.

Fragment 8 : Middleware

const dispatch = action => {
 console.log(&#39;action&#39;, action);
 return action;
}
const middleware1 = dispatch => {
 return action => {
  console.log("middleware1");
  const result = dispatch(action);
  console.log("after middleware1");
  return result;
 }
}
const middleware2 = dispatch => {
 return action => {
  console.log("middleware2");
  const result = dispatch(action);
  console.log("after middleware2");
  return result;
 }
}
const middleware3 = dispatch => {
 return action => {
  console.log("middleware3");
  const result = dispatch(action);
  console.log("after middleware3");
  return result;
 }
}
const compose = middlewares => middlewares.reduce((a, b) => args => a(b(args)))

const middlewares = [middleware1, middleware2, middleware3];
const afterDispatch = compose(middlewares)(dispatch);

const testAction = arg => {
 return { type: "TEST_ACTION", params: arg };
};
afterDispatch(testAction("1111"));
Copier après la connexion

redux Cette méthode est utilisée dans la fonction classique compose, à travers les couches de le middleware déclenche l’exécution de la fonction lorsque l’action est réellement initiée.

Fragment 9 : Traitement des actions redux de l'état

// redux-actions/src/handleAction.js
const handleAction = (type, reducer, defaultState) => {
 const types = type.toString();
 const [nextReducer, throwReducer] = [reducer, reducer];
 return (state = defaultState, action) => {
  const { type: actionType } = action;
  if (!actionType || types.indexOf(actionType.toString()) === -1) {
   return state;
  }
  return (action.error === true ? throwReducer : nextReducer)(state, action);
 }
}
// reduce-reducers/src/index.js
const reduceReducer = (...reducers) => {
 return (previous, current) => {
  reducers.reduce((p, r) => r(p, current), previous);
 }
}
// redux-actions/src/handleActions.js
const handleActions = (handlers, defaultState, { namespace } = {}) => {
 // reducers的扁平化
 const flattenedReducerMap = flattenReducerMap(handles, namespace);
 // 每一种ACTION下对应的reducer处理方式
 const reducers = Reflect.ownkeys(flattenedReducerMap).map(type => handleAction(
  type,
  flattenedReducerMap[type],
  defaultState
 ));
 // 状态的加工器,用于对reducer的执行
 const reducer = reduceReducers(...reducers);
 // reducer触发
 return (state = defaultState, action) => reducer(state, action);
}
Copier après la connexion

Fragment 10 : Processeur de données

const reducers = {
 totalInEuros: (state, item) => {
  return state.euros += item.price * 0.897424392;
 },
 totalInYen: (state, item) => {
  return state.yens += item.price * 113.852;
 }
};
const manageReducers = reducers => {
 return (state, item) => {
  return Object.keys(reducers).reduce((nextState, key) => {
   reducers[key](state, item);
   return state;
  }, {})
 }
}
const bigTotalPriceReducer = manageReducers(reducers);
const initialState = { euros: 0, yens: 0 };
const items = [{ price: 10 }, { price: 120 }, { price: 1000 }];
const totals = items.reduce(bigTotalPriceReducer, initialState);
Copier après la connexion

Fragment 11 : Jugement de valeur nul de l'objet

let school = {
 name: &#39;Hope middle school&#39;,
 created: &#39;2001&#39;,
 classes: [
  {
   name: &#39;三年二班&#39;,
   teachers: [
    { name: &#39;张二蛋&#39;, age: 26, sex: &#39;男&#39;, actor: &#39;班主任&#39; },
    { name: &#39;王小妞&#39;, age: 23, sex: &#39;女&#39;, actor: &#39;英语老师&#39; }
   ]
  },
  {
   name: &#39;明星班&#39;,
   teachers: [
    { name: &#39;欧阳娜娜&#39;, age: 29, sex: &#39;女&#39;, actor: &#39;班主任&#39; },
    { name: &#39;李易峰&#39;, age: 28, sex: &#39;男&#39;, actor: &#39;体育老师&#39; },
    { name: &#39;杨幂&#39;, age: 111, sex: &#39;女&#39;, actor: &#39;艺术老师&#39; }
   ]
  }
 ]
};
// 常规做法
school.classes &&
school.classes[0] &&
school.classes[0].teachers &&
school.classes[0].teachers[0] &&
school.classes[0].teachers[0].name
// reduce方法
const get = (p, o) => p.reduce((xs, x) => (xs && xs[x] ? xs[x] : null), o);
get([&#39;classes&#39;, 0, &#39;teachers&#39;, 0, &#39;name&#39;], school); // 张二蛋
Copier après la connexion

Fragment 12 : Regroupement

const groupBy = (arr, func) =>
arr.map(typeof func === &#39;function&#39; ? func : val => val[func]).reduce((acc, val, i) => {
 acc[val] = (acc[val] || []).concat(arr[i]);
 return acc;
}, {});
groupBy([6.1, 4.2, 6.3], Math.floor); 
groupBy([&#39;one&#39;, &#39;two&#39;, &#39;three&#39;], &#39;length&#39;);
Copier après la connexion

Calculez d'abord toutes les valeurs clés via map, puis classez-les selon les valeurs établies

Fragment 13 : Filtrage d'objets

const pick = (obj, arr) =>
arr.reduce((acc, curr) => (curr in obj && (acc[curr] = obj[curr]), acc), {});
Copier après la connexion

Parcourez en fonction de la valeur clé donnée, comparez s'il existe des valeurs avec la même valeur clé dans l'objet, puis utilisez des expressions virgules à L'objet attribué reçoit la valeur initiale suivante

Fragment 14 : Supprimer la valeur à la position spécifiée dans le tableau

const remove = (arr, func) =>
 Array.isArray(arr)
 ? arr.filter(func).reduce((acc, val) => {
   arr.splice(arr.indexOf(val), 1);
   return acc.concat(val);
 }, []) : [];
const arr = [1, 2, 3, 4];
remove(arr, n => n % 2 == 0);
Copier après la connexion

Filtrez d'abord les valeurs qualifiées dans le tableau selon la fonction filter, puis utilisez reduce pour supprimer les valeurs qualifiées dans le tableau d'origine. On peut conclure que la valeur finale de arr devient [1. , 3]

Fragment 15 : Les promesses sont exécutées dans l'ordre

const runPromisesInSeries = ps => ps.reduce((p, next) => p.then(next), Promise.resolve());
const delay = d => new Promise(r => setTimeout(r, d));
const print = args => new Promise(r => r(args));
runPromisesInSeries([() => delay(1000), () => delay(2000), () => print(&#39;hello&#39;)]);
Copier après la connexion

Fragment 16 : Tri

const orderBy = (arr, props, orders) =>
 [...arr].sort((a, b) =>
  props.reduce((acc, prop, i) => {
   if (acc === 0) {
    const [p1, p2] = orders && orders[i] === &#39;desc&#39; ? [b[prop], a[prop]] : [a[prop], b[prop]];
    acc = p1 > p2 ? 1 : p1 < p2 ? -1 : 0;
   }
   return acc;
  }, 0)
 );
const users = [{ name: &#39;fred&#39;, age: 48 }, { name: &#39;barney&#39;, age: 36 }, { name: &#39;fly&#39;, age: 26 }];
orderBy(users, [&#39;name&#39;, &#39;age&#39;], [&#39;asc&#39;, &#39;desc&#39;]); 
orderBy(users, [&#39;name&#39;, &#39;age&#39;]);
Copier après la connexion

Fragment 17 : Sélectionner

const select = (from, selector) =>
 selector.split(&#39;.&#39;).reduce((prev, cur) => prev && prev[cur], from);
const obj = { selector: { to: { val: &#39;val to select&#39; } } };
select(obj, &#39;selector.to.val&#39;);
Copier après la connexion

Ce qui précède est ce que j'ai compilé pour tout le monde, je l'espère. sera utile à tout le monde à l’avenir.

Articles connexes :

Explication détaillée de la façon dont Vue configure les outils d'empaquetage

Comment implémenter la surveillance dans Vue pour détecter automatiquement les modifications de données

Comment charger le module de gestion des autorisations (tutoriel détaillé)

Comment implémenter la communication dans vue2.0 ?

Quelles sont les méthodes de liaison de style dans Angular 2+

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment supprimer des éléments du tableau es6 Comment supprimer des éléments du tableau es6 Jan 11, 2023 pm 03:51 PM

Méthode : 1. Utilisez shift() pour supprimer le premier élément, la syntaxe est "array.shift()" ; 2. Utilisez pop() pour supprimer le dernier élément, la syntaxe est "array.pop()" ; Utilisez splice() pour supprimer des éléments à n'importe quelle position, la syntaxe est "array.splice(position, number)" 4. Utilisez length pour supprimer les N derniers éléments, la syntaxe est "array.length=original array length-N" ; ; 5. Attribuez directement le tableau vide "[ ]" pour effacer l'élément ; 6. Utilisez delete pour supprimer un élément à l'indice spécifié.

Le tableau js peut-il être converti en tableau php ? Le tableau js peut-il être converti en tableau php ? Jun 02, 2023 am 10:06 AM

Le tableau js peut être converti en tableau php. La méthode d'opération est la suivante : 1. Créez un exemple de fichier php ; 2. Utilisez la syntaxe "JSON.stringify()" pour convertir le tableau js en une chaîne au format JSON ; Utilisez la syntaxe "json_decode()" "Convertissez la chaîne au format JSON en tableau PHP. Le paramètre true est ajouté ici, ce qui signifie que la chaîne au format JSON est convertie en tableau associatif PHP.

Comment convertir une chaîne en tableau en javascript Comment convertir une chaîne en tableau en javascript Nov 23, 2022 pm 07:28 PM

3 méthodes de conversion : 1. Utilisez split() pour diviser une chaîne donnée en un tableau de chaînes, la syntaxe est "str.split (séparateur, longueur maximale du tableau)" 2. Utilisez l'opérateur d'expansion "...", itérable ; objet chaîne, convertissez-le en tableau de caractères, la syntaxe "[...str]"; 3. Utilisez Array.from() pour convertir la chaîne en tableau, la syntaxe "Array.from(str)".

Comment obtenir la longueur d'un tableau en js Comment obtenir la longueur d'un tableau en js Jun 20, 2023 pm 05:33 PM

Obtenir la longueur d'un tableau en JS est très simple. Chaque tableau a une propriété de longueur, qui renvoie la longueur maximale du tableau, c'est-à-dire que sa valeur est égale à la valeur d'indice maximale plus 1. Puisque les indices numériques doivent être inférieurs à 2^32-1, la valeur maximale de l'attribut de longueur est égale à 2^32-1. Le code suivant définit un tableau vide, puis attribue une valeur à l'élément avec l'index égal à 100, puis la propriété length renvoie 101. Par conséquent, l’attribut length ne peut pas refléter le nombre réel d’éléments du tableau.

Il existe plusieurs façons de supprimer un élément d'un tableau js Il existe plusieurs façons de supprimer un élément d'un tableau js Aug 02, 2023 am 10:09 AM

Il existe 4 façons de supprimer un élément d'un tableau js, à savoir : 1. Utilisez splice ; 2. Utilisez filter 3. Utilisez la méthode pop et shift ;

Tri des tableaux JS : comment utiliser la méthode sort() Tri des tableaux JS : comment utiliser la méthode sort() Dec 27, 2023 pm 03:40 PM

La méthode Array.prototype.sort() de JavaScript est utilisée pour trier les éléments d'un tableau. Cette méthode trie sur place, c'est-à-dire qu'elle modifie le tableau d'origine plutôt que de renvoyer un nouveau tableau trié. Par défaut, la méthode sort() trie les chaînes en fonction de leurs valeurs de points de code Unicode. Cela signifie qu'il est principalement utilisé pour trier des chaînes et des nombres, plutôt que pour trier des objets ou d'autres types de données complexes.

Quelles sont les méthodes pour supprimer les doublons des tableaux js ? Quelles sont les méthodes pour supprimer les doublons des tableaux js ? Aug 09, 2023 pm 04:47 PM

Les méthodes pour dédupliquer les tableaux js incluent l'utilisation de Set, l'utilisation d'indexOf, l'utilisation d'includes, l'utilisation de filter et l'utilisation de réduire. 1. Utilisez Set, qui se caractérise par le fait que les éléments de l'ensemble ne seront pas répétés ; 2. Utilisez indexOf pour renvoyer la première position d'index de l'élément spécifié dans le tableau. 3. Utilisez include pour déterminer si un élément est déjà présent ; existe dans le tableau 4. Utilisez filter pour filtrer les éléments; 5. Utilisez réduire pour compresser les éléments d'un tableau, etc.

Comment trouver la longueur et la somme des éléments d'un tableau en JavaScript Comment trouver la longueur et la somme des éléments d'un tableau en JavaScript Sep 20, 2022 pm 02:11 PM

En JavaScript, vous pouvez utiliser l'attribut length pour obtenir la longueur du tableau, la syntaxe est "array object.length" ; vous pouvez utiliser la fonction réduire() ou réduireRight() pour trouver la somme des éléments, la syntaxe est " arr.reduce(function f(pre,curr){ return pre+cur})" ou "arr.reduceRight(function f(pre,curr){return pre+cur})".

See all articles