Итак, в реализации 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/, чтобы отдать им должное)
Я не умею определять общую эффективность кода, поэтому кто-нибудь сможет сказать мне, какая версия будет наиболееидеал? Или есть ли способ повысить эффективность любого из них?