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