类型化Javascript数组的移位值?
我有一个类型化的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
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)