Как я могу эффективно определить, находится ли значение, которое я сохраняю, в пределах диапазона TypedArray?

Как я могу эффективно определить, находится ли значение, которое я сохраняю, в пределах диапазона TypedArray?

Мне нравится ваша первая идея (вы пробовали это?).

 const compare = (val, type) ={amp}gt; { const arr = new type(1) arr[0] = val const same = arr[0] === val console.log(val, arr[0], same) return same } var value = 300 compare(value, Int16Array) compare(value, Uint8Array) compare(value, Uint16Array) value = 2**32 compare(value, Uint32Array) value -= 1 compare(value, Uint32Array) 

Это просто сравнивает значение с экземпляром значения, установленного для определенного типа массива.


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

 const ranges = { [Uint8Array.name]: { min: 0, max: 255 }, [Float32Array.name]: { min: 1.2e-38, max: 3.4e38 } } const compare = (val, type) ={amp}gt; { const { min, max } = ranges[type.name] return val {amp}gt;= min {amp}amp;{amp}amp; val {amp}lt;= max } console.log(compare(100, Float32Array)) console.log(compare(3.4e38, Float32Array)) console.log(compare(3.5e38, Float32Array)) console.log(compare(255, Uint8Array)) console.log(compare(256, Uint8Array)) 

Диапазоны можно найти здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray

Понравилась статья? Поделиться с друзьями:
JavaScript & TypeScript
Adblock
detector