您不能更改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;
}
有了它,它會把00而不是21,我需要刪除該位置。 – felipesmendes