2016-08-24 15 views
1

私は20のバイトとU8IntArrayを持っていると私は(最初の8バイト、バイト9〜20)二つの部分に分離したい:FirefoxでJavaScript:U8IntArrayを分割する方法は?

var arr = new Uint8Array(20); 
var part1 = arr.slice(0, 8); 
var part2 = arr.slice(8); 

console.info(part1, part2); 

動作しますが、Chromeとインターネット・エクスプローラで失敗します。

TypeError: undefined is not a function*

すべてのブラウザで機能するUint8Arrayをスライスする簡単な方法はありますか?

答えて

5

問題は型付き配列は、最初TypedArrayインタフェースにおける任意slice方法を定義していないTyped Array Specification、によって定義されたことです。

現在、型付き配列はECMAScript 6の一部ですが、Internet Exporerでは完全にサポートしていません。

古い仕様で定義されたメソッドだけを使用する方が安全です。この場合、TypedArray.prototype.subarrayはIE10以降に動作します。

var arr = new Uint8Array(20); 
 
var part1 = arr.subarray(0, 8); 
 
var part2 = arr.subarray(8); 
 
console.info(part1, part2);

は、別の代替ではなく、直接IE11からサポートアレイ上のバッファにsliceを使用しています。

var arr = new Uint8Array(20); 
 
var part1 = new Uint8Array(arr.buffer.slice(0, 8)); 
 
var part2 = new Uint8Array(arr.buffer.slice(8)); 
 
console.info(part1, part2);

+0

ご返信ありがとうございます。ちょうどここにそれを見た:http://stackoverflow.com/questions/35313993/typedarray-prototype-slice-not-supported-on-chrome私は10mであなたの答えを正しいものとしてマークしています(可能な場合)! – Tream

+0

@Tream良い発見、たぶん1つの質問は、もう一方の複製として閉じられるべきです。あなたの質問はもっとはっきりしていると思いますが、私がここに答えたので、私が他のものを閉じると、私は私のデュエルママーを乱用するように見えるかもしれません。 – Oriol

+0

追加情報をお寄せいただきありがとうございます! :) – Tream

0

あなたは、予想されるバイト数を取得するために、第二と第三引数を指定した後、元のバッファソースから新しいUint8Arrayを作成することができます。

var arr = new Uint8Array(20); 
var part1 = new Uint8Array(arr.buffer, 0, 8); 
var part2 = new Uint8Array(arr.buffer, 8); 

この方法では元のArrayBufferはスライスされません。

関連する問題