gpt4 book ai didi

javascript - 如何从 ArrayBuffer Javascript 中删除位置

转载 作者:行者123 更新时间:2023-12-03 08:24:36 24 4
gpt4 key购买 nike

我有这个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 ...>

最佳答案

您无法更改 ArrayBuffer 的大小,因此您不能直接删除一个元素并使其消失。 ArrayBuffer.prototype.slice 将为您提供一个缓冲区的副本,该副本可以是相同大小或更小的大小,因此它本身也没有帮助。

您可以将位置 N(在您的情况下为 24)之后的所有条目向左移动,用 N+1 覆盖 N,用 N+2 覆盖 N+1 等,最后 trim 最后一个值。

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;
}

关于javascript - 如何从 ArrayBuffer Javascript 中删除位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33609092/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com