Замена функции объекта Array.find () в серверном SuiteScript - PullRequest
0 голосов
/ 05 ноября 2019

Итак, в реализации JavaScript, которую NetSuite использует для обработки на стороне сервера, отсутствует метод Array.find (), как я обнаружил, поскольку он использует ECMAScript 5.1, а метод был определен в ES6 ( TypeError:Не удается найти функцию find в объекте ), что ограничивает некоторые другие параметры для обработки этого. Поэтому я хотел определить замену в моем библиотечном файле, которая также была бы максимально эффективной (не называя их «найти», чтобы предотвратить переопределение функции по умолчанию в случае загрузки моей библиотеки в браузер). У меня есть следующие две версии:

Версия # 1

Array.prototype.altFind = function (func) {
    if (func == null) { return null; }
    for (var i = 0; i < this.length; i++) {
        if (func(this[i])) {
            return this[i];
        }
    }

    return null;
}

Версия # 2

Object.defineProperty(Array.prototype, 'altFind',
    {
            value: function (predicate) {
                if (this == null) {
                    throw new TypeError('"this" is null or not defined');
                }
                if (predicate == null)) {
                    throw new TypeError('predicate is null or not defined');
                }
                var o = Object(this);
                var len = o.length >>> 0;
                if (typeof predicate !== 'function') {
                    throw new TypeError('predicate must be a function');
                }
                var thisArg = arguments[1];
                var k = 0;
                while (k < len) {
                    var kValue = o[k];
                    if (predicate.call(thisArg, kValue, k, o)) { return kValue; }
                    k++;
                }
                return undefined;
            }
        ,   configurable: true
        ,   writable: true
    }
);

(ПРИМЕЧАНИЕ: версия # 2 была найдена в https://netsuitehub.com/forums/topic/adding-modern-functionality-to-array-object-find-findindex-in-your-server-side-suitescripts/, чтобы отдать им должное)

Я не умею определять общую эффективность кода, поэтому кто-нибудь сможет сказать мне, какая версия будет наиболееидеал? Или есть ли способ повысить эффективность любого из них?

...