2015-04-16 30 views
18

Tôi có thể hiện Uint8Array chứa dữ liệu nhị phân của một số tệp.
Tôi muốn gửi dữ liệu đến máy chủ, nơi nó sẽ được deserialized như byte [].
Nhưng nếu tôi gửi Uint8Array, tôi có lỗi deserialization.Chuyển đổi Uint8Array thành Mảng trong Javascript

Vì vậy, tôi muốn chuyển đổi nó thành mảng, vì mảng được deserialized tốt.
tôi làm điều đó như sau:

function uint8ArrayToArray(uint8Array) { 
     var array = []; 

     for (var i = 0; i < uint8Array.byteLength; i++) { 
      array[i] = uint8Array[i]; 
     } 

     return array; 
    } 

Chức năng này hoạt động tốt, nhưng nó không phải là rất hiệu quả cho các tập tin lớn.

Câu hỏi: Có cách nào hiệu quả hơn để chuyển đổi Uint8Array -> Array không?

Trả lời

32

Bạn có thể sử dụng var array = Array.from(uint8Array) trong môi trường có hỗ trợ Array.from đã (ES6), khi nó không được hỗ trợ, bạn có thể sử dụng var array = [].slice.call(uint8Array)

+0

Vâng, [] .slice hoạt động tốt, và nó là nhỏ gọn hơn. Nhưng nó có vẻ không hiệu quả hơn. Mất ~ 5 giây cho tệp 10mb. ( –

+0

.entries() (và/hoặc .values ​​()) trả về đối tượng ArrayIterator, không phải mảng. –

+3

Nitpicking tại đây, nhưng bạn chỉ cần một chút tốt hơn gọi Array.prototype.slice.call thay vì [] .slice – jordancpaul

-1

Có một phương pháp Uint8Array sử dụng nguyên mẫu (nhưng nó chỉ được hỗ trợ bởi trình duyệt Firefox và Chrome) :

TypedArray.prototype.entries() -> nó trả về một mảng.

Check it out: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/entries

+0

Không, nó là đối tượng ArrayIterator Đọc liên kết –

+0

Ooo, tôi hiểu rồi, sai lầm của tôi xin lỗi vì không hữu ích cho bạn! –

Các vấn đề liên quan