javascript - TypedArrays 是否存在 splice 或者是否有等价物?

标签 javascript ecmascript-6 typed-arrays

对于 TypedArrays,是否存在或将会有一个等价于 Array.prototype.splice 的东西?

我希望能够从 TypedArray 中删除一系列项目。

最佳答案

因此 ES6 中的 TypedArrays 不是经典的 Javascript 数组,而是更接近于底层二进制缓冲区的 API (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays)。

因为 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/

关于javascript - TypedArrays 是否存在 splice 或者是否有等价物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32232134/

相关文章:

javascript - 使用 Es6 语法循环遍历 typescript 中的对象数组并获取特定失败

javascript - 为什么 Form.Select 在我的简单 react-bootstrap 应用程序中没有被识别,遵循 react-bootstrap 文档?

javascript - 如何返回数组中接下来的 x 个项目?

javascript - ReactJS 如何从列表中删除项目

javascript - 将 AudioBuffer 转换为 ArrayBuffer/Blob 以供 WAV 下载

javascript - Uint8ClampedArray 的奇怪舍入行为

javascript - Canvas RGBA 到 RGB 转换

javascript - 接受对 S3 的 CORS 请求以进行文件显示,但不接受 Javascript 库的加载

javascript - Backbone.js:智能更新已更改属性列表

javascript - 当我需要同时过滤多个内容时,如何调用一次过滤器?