2015-11-09 73 views
0

我有這樣的ArrayBuffer,需要移除/刪除的價值21.如何從ArrayBuffer的Javascript刪除位置

位置我試圖用.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 ...> 
+0

有了它,它會把00而不是21,我需要刪除該位置。 – felipesmendes

回答

0

退房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)); 
+0

因此,如果我在我的情況下做arr.slice(24),它會返回沒有21值的新的arraybuffer? – felipesmendes

+0

你能幫我嗎? – felipesmendes

0

您不能更改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; 
}