2016-10-27 2 views
1

В соответствии с the documentation on the Uint8ClampedArray,определение диапазона значений TypedArray элемента

Uint8ClampedArray набран массив представляет собой массив 8-битных целых чисел без знака, прикрепленного к 0-255; если вы указали значение, которое вне диапазона [0,255], вместо него будут установлены 0 или 255.

Другие TypedArray s функция аналогичным образом. Учитывая любой типизированный массив среди перечисленных типов, существует ли способ программно получить максимальное/минимальное значение, возможное для хранения в нем?

Что-то вдоль линий:

Uint8ClampedArray().maxItemValue // returns 255 
+1

[ 'BYTES_PER_ELEMENT'] (https://developer.mozilla.org/en-US/ docs/Web/JavaScript/Reference/Global_Objects/TypedArray/BYTES_PER_ELEMENT) может помочь, но вам все равно нужно отличать подписанные от неподписанных типов. – Bergi

+0

Да, я тоже это видел ... в конечном итоге может быть самым эффективным просто сделать оператор switch для свойства name, но было бы неплохо не делать этого. –

+0

Почему свойство '.name'? Вы можете включить сами функции, если хотите. – Bergi

ответ

1

Я хотел бы использовать следующее:

function maxElementValue(arr) { 
    const c = arr.constructor; 
    const test = c.of(-1.5)[0]; 
    if (test > 0) // unsigned integers 
     return test; 
    // return 0xFFFFFFFF >>> (32 - 8 * c.BYTES_PER_ELEMENT); 
    // return Math.pow(2, 8 * c.BYTES_PER_ELEMENT) - 1; 
    if (test == -1) // signed integers 
     return 0x7FFFFFFF >>> (32 - 8 * c.BYTES_PER_ELEMENT); 
    // return Math.pow(2, 8 * c.BYTES_PER_ELEMENT - 1) - 1; 
    if (test == 0) // clamped 
     return 0xFF; // there's only one of these 
    if (test == -1.5) 
     throw new TypeError("floats are not supported"); 
    throw new TypeError("weirdly behaving typed array"); 
} 
+1

приятно! похоже, что он работает так, как ожидалось. Я * думаю * Я могу выяснить часть минимального значения самостоятельно. –

Смежные вопросы