/
Mikhail823
/
todo
Обзор
Документация
Войти
/
Mikhail823
/
todo
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
node_modules/array.prototype.reduce/implementation.js
68 строк
2 KB
Mikhail Popov
j
23 фев 2026, 16:12
23 фев 2026, 16:12
ff7232a
Код
Авторство
О чём код?
'use strict'; var Call = require('es-abstract/2024/Call'); var Get = require('es-abstract/2024/Get'); var HasProperty = require('es-abstract/2024/HasProperty'); var IsCallable = require('es-abstract/2024/IsCallable'); var LengthOfArrayLike = require('es-abstract/2024/LengthOfArrayLike'); var ToObject = require('es-object-atoms/ToObject'); var ToString = require('es-abstract/2024/ToString'); var callBound = require('call-bound'); var isString = require('is-string'); var $Object = require('es-object-atoms'); var $TypeError = require('es-errors/type'); // Check failure of by-index access of string characters (IE < 9) and failure of `0 in boxedString` (Rhino) var boxedString = $Object('a'); var splitString = boxedString[0] !== 'a' || !(0 in boxedString); var strSplit = callBound('%String.prototype.split%'); module.exports = function reduce(callbackfn) { var O = ToObject(this); var self = splitString && isString(O) ? strSplit(O, '') : O; var len = LengthOfArrayLike(self); // If no callback function or if callback is not a callable function if (!IsCallable(callbackfn)) { throw new $TypeError('Array.prototype.reduce callback must be a function'); } if (len === 0 && arguments.length < 2) { throw new $TypeError('reduce of empty array with no initial value'); } var k = 0; var accumulator; var Pk, kPresent; if (arguments.length > 1) { accumulator = arguments[1]; } else { kPresent = false; while (!kPresent && k < len) { Pk = ToString(k); kPresent = HasProperty(O, Pk); if (kPresent) { accumulator = Get(O, Pk); } k += 1; } if (!kPresent) { throw new $TypeError('reduce of empty array with no initial value'); } } while (k < len) { Pk = ToString(k); kPresent = HasProperty(O, Pk); if (kPresent) { var kValue = Get(O, Pk); accumulator = Call(callbackfn, void undefined, [accumulator, kValue, k, O]); } k += 1; } return accumulator; };