уменьшить реализует фильтр, выравнивание массива карт и т. д.

JavaScript

mapФункция получает функцию в качестве параметра, а функция в качестве параметра получает три значения параметров, которые должны пройти каждый элемент массива, индекс элемента и сам массив. Эти три параметра просто соответствуют 2-му, 3-му и 4-му параметрам первого параметра функции, полученного функцией сокращения. Это ядро ​​реализации

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

уменьшить карту орудий

Array.prototype._map = function (callback) {
  if(typeof callback === 'function') {
    return this.reduce((prev,item,index,arr) => {
      prev.push(callback(item, index, arr))
      return prev
    }, [])
  } else {
    console.log(new Error('callback is not function'))
  }
}

let val = [1, 5, 6]._map(item => item+ 1)
console.log(val);  // [2, 6, 7]

выполнитьfilterидеи и реализацияmapОн согласован, но первый заключается в том, чтобы поместить все результаты выполнения в массив, и фильтру необходимо принять решение:Если переданный фильтрующей функцией параметр (параметр является функцией) имеет возвращаемое значение после выполнения, то есть после проверки, в массив помещается текущий элемент обхода, если нет возвращаемого значения, то игнорируется.

уменьшить фильтр оборудования

  Array.prototype._filter = function (callback) {
    if(typeof callback === 'function') {
      return this.reduce((prev,item,index,arr) => {
        callback(item, index, arr) ? prev.push(item) : null
        return prev
      }, [])
    } else {
      console.log(new Error('callback is not function'))
    }
  }
  let val = [1, 5, 6]._filter(item => item > 2)
  console.log(val);  // [5, 6]

найти макс/мин

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

console.log(arr.reduce((prev, cur) => Math.max(prev, cur))); // 5

console.log(arr.reduce((prev, cur) => Math.min(prev, cur))); // 1

Дедупликация массива

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

let result = arr.reduce((prev, item, index, arr) => {
!prev.includes(item) && prev.push(item);
return prev
}, [])
console.log(result);  //[1, 2, 3, 4, 5]

Выравнивание массива

let arr = [1, 2, '3js', [4, 5, [6], [7, 8, [9, 10, 11], null, 'abc'], {age: 58}, [13, 14]], '[]', null];
function f(arr) {
    if(Array.isArray(arr)) {
      return arr.reduce((prev, item) => {
        return Array.isArray(item) ? prev.concat(f(item)) : prev.concat(item)
      }, [])
    } else {
      throw new Error("arr + ' is not array'")
    }
}

результат:

结果