Рубрики
Без рубрики

Узнайте JavaScript Уменьшите метод с 10 примерами

Метод уменьшения применяет функцию для каждого элемента массива и накапливает результат итеративно … Теги с новичками, JavaScript, WebDev, программированием.

Метод уменьшения применяет функцию для каждого элемента массива и накапливает результат, итеративно из отправной точки, затем возвращает одно значение/объект.

Это начальное значение может быть указано или если не уменьшите, будет использовать первый элемент в массиве.

Большинство из этих примеров могут не быть решением для этой проблемы, но идея – проиллюстрировать, как мы можем использовать, чтобы их решить.

Хорошо, давайте начнем с.

Суммирование и умножение:

∑ a n d ∏ \ сумма и \ prod ∑ ан. d ∏

// Summation
[3, 5, 4, 3, 6, 2, 3, 4].reduce((a, i) => a + i);

// Without initial value
[3, 5, 4, 3, 6, 2, 3, 4].reduce((a, i) => a + i, 5 );

// For clarity the above code is the same as 
[3, 5, 4, 3, 6, 2, 3, 4].reduce(function(a, i){return (a + i)}, 0 );

// Multiplication
[3, 5, 4, 3, 6, 2, 3, 4].reduce((a, i) => a * i);

В этом примере вы можете оставить начальное значение, так как он будет схватить первый элемент в массиве, но вы также можете дать ему компенсирование или смещение довольно полезно для этого.

Найти максимум в массиве:

[3, 5, 4, 3, 6, 2, 3, 4].reduce((a, i) => Math.max(a, i), -Infinity);

Здесь, в каждой итерации мы возвращаем максимум между аккумулятором и текущим элементом, а в конце мы имеем максимум всего массива. Не используйте это, если вы действительно хотите найти максимум в массиве, вы можете использовать:

Math.max(...[3, 5, 4, 3, 6, 2, 3, 4]);

Объединение неровных массивов

let data = [
  ["The","red", "horse"],
  ["Plane","over","the","ocean"],
  ["Chocolate","ice","cream","is","awesome"], 
  ["this","is","a","long","sentence"]
]
let dataConcat = data.map(item=>item.reduce((a,i)=>`${a} ${i}`))

// Result
['The red horse', 
'Plane over the ocean', 
'Chocolate ice cream is awesome', 
'this is a long sentence']

Довольно просто, здесь мы также используем карту, чтобы пройти каждый элемент в массиве, и мы делаем уменьшение со всеми массивами, и мы уменьшаем массив в одну строку.

Удаление дубликатов в массиве:

let dupes = [1,2,3,'a','a','f',3,4,2,'d','d']
let withOutDupes = dupes.reduce((noDupes, curVal) => {
  if (noDupes.indexOf(curVal) === -1) { noDupes.push(curVal) }
  return noDupes
}, [])

Мы проверяем, есть ли текущее значение индекс на массиве аккумулятора, если не будет возвращаться -1, следовательно, не в массиве, и мы можем добавить его. Вы можете сделать это намного лучше с JavaScript набор По умолчанию он хранит только уникальные значения, но в любом случае, я думаю, что это аккуратный алгоритм, чтобы подумать.

Проверка скобки

[..."(())()(()())"].reduce((a,i)=> i==='('?a+1:a-1,0);

//Long way with for loop
status=0
for i in string:
  if(i=="("):
    status=status+1
  elif(i==")"):
    status=status-1     
  if(status<0):
    return False

Это крутой, который я адаптировал из кодирования, который я сделал некоторое время назад. Действительно, мы можем заканчивать петлю раньше, проверяя, если статус меньше 0 в любой точке. Здесь состояние есть, если состояние 0, скобки правильны иначе, есть дисбаланс.

Группа по свойству

let obj = [
  {name: 'Alice', job: 'Data Analyst', country: 'AU'},
  {name: 'Bob', job: 'Pilot', country: 'US'},
  {name: 'Lewis', job: 'Pilot', country: 'US'},
  {name: 'Karen', job: 'Software Eng', country: 'CA'},
  {name: 'Jona', job: 'Painter', country: 'CA'},
  {name: 'Jeremy', job: 'Artist', country: 'SP'},
]
let ppl = obj.reduce((group, curP) => {
  let newkey = curP['country']
  if(!group[newkey]){
    group[newkey]=[]
  }
  group[newkey].push(curP)
  return group
}, [])

Здесь мы группируем первый массив объектов по ключу кантри, в каждой итерации мы проверяем, существует ли ключ, если не создать массив, то мы добавляем текущий человек к этому, и вернем групповую массив. Вы можете сделать функцию с этим для группировки объектов с указанным ключом.

Сплющенный массив массивов

let flattened = [[3, 4, 5], [2, 5, 3], [4, 5, 6]].reduce(
  (singleArr, nextArray) => singleArr.concat(nextArray), [])
// results is [3, 4, 5, 2, 5, 3, 4, 5, 6]

Это всего лишь 1 уровень глубокой, но он может адаптировать это с рекурсивной функцией, но я не тот фанат, чтобы сделать рекурсивные вещи на JavaScript 😂 Предполагаемый способ сделать это просто для использования метода .flat, он сделает такой же

[ [3, 4, 5],
  [2, 5, 3],
  [4, 5, 6]
].flat();

Сила только положительные числа

[-3, 4, 7, 2, 4].reduce((acc, cur) => {
  if (cur> 0) {
    let R = cur**2;
    acc.push(R);
  }
  return acc;
}, []);

// Result
[16, 49, 4, 144]

Это похоже на выполнение карты и фильтр одновременно, мы отфильтровали отрицательные числа и поднимаемся положительным.

Обратная строка

const reverseStr = str=>[...str].reduce((a,v)=>v+a)

Это будет работать с любым объектом не только с строками, также обратите внимание, что с этим синтаксисом у нас есть уменьшение в функции, чтобы мы могли назвать REVERSSESTR («HOLA»), и он даст ALOH 😂

Двоичный до десятичности

const bin2dec = str=>[...String(str)].reduce((acc,cur)=>+cur+acc*2,0)

// Long format for readability
const bin2dec = (str) => {
  return [...String(str)].reduce((acc,cur)=>{
    return +cur+acc*2
  },0)
}

Чтобы проиллюстрировать этот, позволяет увидеть пример: (10111) -> 1+ (1+ (1+ (0+ (1 + 0 *2)*2)*2)*2)*2 Это немного отличается, чтобы проиллюстрировать, но думать, как если бы первый пробег – это тот, кто находится в середине, и он расширяется наружу от центра.

Я буду признателен, если вы дадите мне следующую, я планирую сделать больше контента здесь, а также если у вас есть время, проверьте мой канал YouTube RamgendePloy Оставьте подпунктивную, если вам нравится там 😄

Вот и все Я надеюсь, что у вас есть лучшее понимание уменьшения сейчас Выберите правильный инструмент для правильной проблемы.

Я надеюсь, что однажды вы можете использовать уменьшить прохладный путь и чувствовать себя хорошо о себе 😂

Благодаря @Jonrandy за последние 2 последних 2

Оригинал: “https://dev.to/ramgendeploy/learn-javascript-reduce-method-with-5-examples-128n”