是否存在或等同于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])

http://www.es6fiddle.net/idt3epy2/

09-27 16:33