如何从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 ...>
您不能更改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;
}
查看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));
相关文章:
- 在jquery中是否有任何方法或位置可以编写从Dom中删除页面后调用的方法
- Javascript删除数组中某个位置之后的项
- 使用 bindTo() 无法删除新位置的标记
- 如何解析html以删除元素并只返回其位置的标题
- 删除数组元素并将它们添加回原来的位置
- 为什么我的删除位置语句不起作用
- 为什么删除条形,然后将条形重新添加到我的堆栈条形图中会更改条形的位置
- 隐藏的“纬度”和“lng”字段没有被删除,所以我的脚本仍在从不正确的地理位置中搜索纬度和液化天然气结果
- 如何获取从 DOMNodeRemove 事件中删除的元素的节点位置
- 如何删除未定义的对象错误并根据位置重定向用户
- 将类添加到动态元素上的正文,在页面上的任意位置再次单击后删除
- 垂直标签:删除没有jQuery或固定位置属性的UL和DIV中断
- 单击时更改标记位置时,信息窗口不会删除
- 取消链接代码以从服务器中删除文件的位置
- 在jQuery中只删除位置属性
- 从 OSM 中删除位置
- 如何从ArrayBuffer Javascript中删除位置
- javascript字符串删除X位置的一个字符并添加到起始位置
- 如何将删除的元素恢复到jQuery中删除位置之前
- 使用jquery只删除位置相关的内联样式