簡體   English   中英

如何從ArrayBuffer Javascript中刪除位置

[英]How to remove position from ArrayBuffer Javascript

我有這個ArrayBuffer,需要刪除/刪除值21的位置。

我嘗試使用.splice(24,1)delete array[24] ,但無法正常工作...

正確的方法是什么?

<Buffer 01 a6 31 35 cb 12 00 08 7d cb b8 ae c5 3e 2d 0e 1e d0 fe 29 4e 61 fd 01 21 a0 00 c0 03 00 00 00 00 00 00 00 00 00 04 24 03 19 15 cb 0b 3b 26 06 0b 31 00 ...>

簽出slice()

var buffer = new ArrayBuffer(12);
var dataView = new DataView(buffer);
dataView.setInt8(0, 0x12);
dataView.setInt8(1, 0x34);
dataView.setInt8(2, 0x56);
console.log(dataView.getInt32(0).toString(16)); 
console.log(dataView.getInt8(0).toString(16));
var dataView = new DataView(buffer.slice(1));
console.log(dataView.getInt32(0).toString(16)); 
console.log(dataView.getInt8(0).toString(16));

您不能更改ArrayBuffer的大小,因此不能僅刪除元素並使它消失。 ArrayBuffer.prototype.slice將為您提供緩沖區的副本,該緩沖區的大小可以相同或更小,因此單獨使用也無濟於事。

您可以將所有條目移到左側的位置N(在您的情況下為24)之后,用N + 1覆蓋N,用N + 2覆蓋N + 1等,最后修剪最后一個值。

function deleteWithShift(arrayBuffer, position) {
    var typedArray = new Uint8Array(arrayBuffer),
        i;
    for ( i = position+1; i < typedArray.length; i+=1 ) {
        ui8Array[i-1] = ui8Array[i];
    }
    return ui8Array.buffer.slice(0, ui8Array.length-1);
}

您還可以在位置前后對緩沖區進行兩次切片,然后合並兩個數組。

function deleteWithSliceAndMerge(arrayBuffer, position) {
    var frontValues = new Uint8Array( arrayBuffer, 0, position ),
        backValues = new Uint8Array( arrayBuffer, position+1 ),
        mergedArray = new Uint8Array(frontValues.length + backValues.length);

    mergedArray.set( frontValues );
    mergedArray.set( backValues, position );

    return mergedArray.buffer;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM