2016-08-24 51 views
1

我有20個字節的U8IntArray,我想將其分離成兩個部分(第一8個字節和字節9至20):JavaScript:如何分隔U8IntArray?

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

console.info(part1, part2); 

在Firefox,但在鉻和互聯網資源管理器失敗:

TypeError: undefined is not a function*

有沒有簡單的方法來切片的Uint8Array,它將在所有瀏覽器中工作?

回答

5

問題是Typed數組最初由Typed Array Specification定義,它沒有在TypedArray接口中定義任何slice方法。

現在鍵入的數組是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在10米標記你的答案是正確的(當它是可能的)! – Tream

+0

@Tream好的發現,可能一個問題應該被關閉,作爲另一個問題的副本。我認爲你的問題更清楚,但是,因爲我在這裏回答,如果我關閉另一個,它可能看起來虐待我的dupehammer。 – 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