2015-11-09 3 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), в моем случае он вернет новый arraybuffer без значения 21? – felipesmendes

+0

вы можете мне помочь? – felipesmendes

0

Вы не можете изменить размер в ArrayBuffer, и поэтому вы не можете просто удалить элемент и сделать его исчезнуть. ArrayBuffer.prototype.slice предоставит вам копию буфера, который может быть того же размера или меньше, поэтому сам по себе это тоже не поможет.

Вы можете перенести все записи после позиции N (в вашем случае 24) влево, перезаписывая N с N + 1, N + 1 с N + 2 и т. Д. И в конце обрезая последнее значение.

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; 
} 
Смежные вопросы