类型化Javascript数组的移位值?

类型化Javascript数组的移位值?,javascript,arrays,typed-arrays,Javascript,Arrays,Typed Arrays,我有一个类型化的Javascript数组(Float32Array),我希望在数组的开头一次插入一个值,并将所有其他值移动一个位置(最后一个值被删除)。 下面是一个例子: 假设我已经初始化了大小为3的数组。 数组当前保存值[2.0,7.2,4.5],我想插入数字8.1。结果应该是[8.1,2.0,7.2] 如果我使用普通的JS数组,这不会有问题——我可以使用像.unshift()或.pop()这样的函数,但是这些方法不适用于类型化JS数组,因为它们会改变数组的大小 有没有一种方法可以使用类型化J

我有一个类型化的Javascript数组(
Float32Array
),我希望在数组的开头一次插入一个值,并将所有其他值移动一个位置(最后一个值被删除)。

下面是一个例子:
假设我已经初始化了大小为3的数组。 数组当前保存值
[2.0,7.2,4.5]
,我想插入数字
8.1
。结果应该是
[8.1,2.0,7.2]


如果我使用普通的JS数组,这不会有问题——我可以使用像
.unshift()
.pop()
这样的函数,但是这些方法不适用于类型化JS数组,因为它们会改变数组的大小

有没有一种方法可以使用类型化Javascript数组有效地实现这一点?

您可以通过将固定数组末尾的所有值向右移动1来“取消移动”一个值。完成此操作后,只需使用value参数替换头部。传统的for循环将是实现这一点最有效的方法

这里的关键是向后循环,用它左边的邻居填充最后一个插槽

适用于以下所有项目:

  • 数组
  • Int8Array
    Uint8Array
    uint8clampedaray
  • Int16Array
    Uint16Array
  • int32阵列
    uint32阵列
  • Float32Array
    Float64Array
  • bigint64数组
    biguint64数组
如您所知,对象并没有标准
Array
对象上可用的所有方法

const shiftRight=(集合,值)=>{
for(设i=collection.length-1;i>0;i--){
集合[i]=集合[i-1];//右移
}
集合[0]=value;//在头部放置新值
回收;
}
常量shiftLeft=(集合,值)=>{
for(设i=0;i[ 8.1, 2.0, 7.2 ]

console.log(shiftLeft(float32,4.5));// 这里有一个不涉及使用循环的方法(在您的一端)

  • 使用子阵列时,使用相同的基础ArrayBuffer,而不是分配新的缓冲区
  • 与Polywhill先生相比,这两个函数只需将值移动任意数量的步骤,而不需要插入任何值,因为我认为这也有利于其他用例,并使这两个函数更“纯粹”。因此,它更符合左/右移位的名称
  • 子阵列+设置+填充是否更快/内存友好?我不知道
const shiftRight=(集合,步骤=1)=>{
集合(集合子数组(0,-步骤),步骤)
集合。填充(0,0,步骤)
回收
}
常量shiftLeft=(集合,步骤=1)=>{
集合(集合子数组(步骤))
集合。填充(0,-步骤)
回收
}
const float32=新的float32数组([2.0,7.2,4.5]);
shiftRight(float32)//>[0,2.0,7.2]
float32[0]=8.1/[8.1,2.0,7.2]在头部放置新值
console.log(float32)
shiftLeft(float32)/>[0,0,2.0]右移2步
console.log(float32)