TypedArrays 是否存在 splice 或者是否有等价物?
Does splice exist for TypedArrays or is there an equivalent?
对于 TypedArrays 是否存在或将有等同于 Array.prototype.splice
的东西?
我希望能够从 TypedArray 中删除一系列项目。
因此 ES6 中的 TypedArrays 不是经典的 Javascript 数组,而是更接近底层二进制缓冲区 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays) 的 API。
由于 splice
改变了数组的实际长度,因此它不适用于 TypedArrays (http://www.es6fiddle.net/idt0ugqo/)。
您可以通过创建自己的拼接来创建类似的行为(尽管速度会更慢)。
这是一个简单的等价物,只是它没有考虑 `splice 的所有细微差别。正如@bergi 评论的那样,我不允许负值。
function splice(arr, starting, deleteCount, elements) {
if (arguments.length === 1) {
return arr;
}
starting = Math.max(starting, 0);
deleteCount = Math.max(deleteCount, 0);
elements = elements || [];
const newSize = arr.length - deleteCount + elements.length;
const splicedArray = new arr.constructor(newSize);
splicedArray.set(arr.subarray(0, starting));
splicedArray.set(elements, starting);
splicedArray.set(arr.subarray(starting + deleteCount), starting + elements.length);
return splicedArray;
};
splice(new Uint8Array([1,2,3]), 0, 1); // returns Uint8Array([1,3])
Is there or is there ever going to be an equivalent of Array.prototype.splice
for TypedArrays
?
否,因为TypedArrays
无法更改它们的大小。也没有 push
/pop
/shift
/unshift
方法。
如果要从数组中删除元素,通常将它们设置为空值,并在遍历数组时处理这些空值。这也避免了在删除元素后必须移动所有元素。
如果您真的需要这个,最好的办法是创建一个新数组并在其上复制元素(删除部分之前的元素,新元素,然后是删除部分之后的元素)。 @cdbitesky 为此提供了一个很好的实现。
对于 TypedArrays 是否存在或将有等同于 Array.prototype.splice
的东西?
我希望能够从 TypedArray 中删除一系列项目。
因此 ES6 中的 TypedArrays 不是经典的 Javascript 数组,而是更接近底层二进制缓冲区 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays) 的 API。
由于 splice
改变了数组的实际长度,因此它不适用于 TypedArrays (http://www.es6fiddle.net/idt0ugqo/)。
您可以通过创建自己的拼接来创建类似的行为(尽管速度会更慢)。
这是一个简单的等价物,只是它没有考虑 `splice 的所有细微差别。正如@bergi 评论的那样,我不允许负值。
function splice(arr, starting, deleteCount, elements) {
if (arguments.length === 1) {
return arr;
}
starting = Math.max(starting, 0);
deleteCount = Math.max(deleteCount, 0);
elements = elements || [];
const newSize = arr.length - deleteCount + elements.length;
const splicedArray = new arr.constructor(newSize);
splicedArray.set(arr.subarray(0, starting));
splicedArray.set(elements, starting);
splicedArray.set(arr.subarray(starting + deleteCount), starting + elements.length);
return splicedArray;
};
splice(new Uint8Array([1,2,3]), 0, 1); // returns Uint8Array([1,3])
Is there or is there ever going to be an equivalent of
Array.prototype.splice
forTypedArrays
?
否,因为TypedArrays
无法更改它们的大小。也没有 push
/pop
/shift
/unshift
方法。
如果要从数组中删除元素,通常将它们设置为空值,并在遍历数组时处理这些空值。这也避免了在删除元素后必须移动所有元素。
如果您真的需要这个,最好的办法是创建一个新数组并在其上复制元素(删除部分之前的元素,新元素,然后是删除部分之后的元素)。 @cdbitesky 为此提供了一个很好的实现。