|  | // Copyright (c) 2024, the R8 project authors. Please see the AUTHORS file | 
|  | // for details. All rights reserved. Use of this source code is governed by a | 
|  | // BSD-style license that can be found in the LICENSE file. | 
|  | Array.prototype.any = function(predicate) { | 
|  | for (const element of this.values()) { | 
|  | if (predicate(element)) { | 
|  | return true; | 
|  | } | 
|  | } | 
|  | return false; | 
|  | }; | 
|  | Array.prototype.first = function() { | 
|  | return this[0]; | 
|  | }; | 
|  | Array.prototype.avg = function() { | 
|  | return this.reduce(function(x, y) { return x + y; }, 0) / this.length; | 
|  | }; | 
|  | Array.prototype.max = function() { | 
|  | return this.reduce(function(x, y) { return x === null ? y : Math.max(x, y); }, null); | 
|  | }; | 
|  | Array.prototype.min = function() { | 
|  | return this.reduce(function(x, y) { return x === null ? y : Math.min(x, y); }, null); | 
|  | }; | 
|  | Array.prototype.p = function(value) { | 
|  | const copy = [...this]; | 
|  | copy.sort(); | 
|  | const index = Math.floor(copy.length * value / 100); | 
|  | if (copy.length % 2 == 0) { | 
|  | return (copy[index - 1] + copy[index]) / 2; | 
|  | } else { | 
|  | return copy[index]; | 
|  | } | 
|  | }; | 
|  | Array.prototype.reverseInPlace = function() { | 
|  | for (var i = 0; i < Math.floor(this.length / 2); i++) { | 
|  | var temp = this[i]; | 
|  | this[i] = this[this.length - i - 1]; | 
|  | this[this.length - i - 1] = temp; | 
|  | } | 
|  | }; | 
|  | Number.prototype.ns_to_s = function() { | 
|  | const seconds = this/10E8; | 
|  | const seconds_with_one_decimal = Math.round(seconds*10)/10; | 
|  | return seconds; | 
|  | }; |