我有一个类型化的 Javascript 数组 (Float32Array
),我想在数组的开头一次插入一个值,并将所有其他值移动一个位置(最后一个值被删除) .
这是一个例子:
假设我已经初始化了大小为 3 的数组。
该数组当前保存值 [2.0, 7.2, 4.5]
,我想插入数字 8.1
。结果应为 [8.1, 2.0, 7.2]
。
如果我使用普通的 JS 数组,这不会有问题 - 我可以使用诸如 .unshift()
或 .pop()
之类的函数,但这些方法不适用于类型化 JS 数组,因为它们改变了数组的大小。
有没有办法使用类型化的 Javascript 数组有效地实现这一点?
最佳答案
这是一种不涉及使用循环(在您这边)的方法。
- 使用子数组时使用相同的底层 ArrayBuffer,而不是分配新的缓冲区
- 与 Polywhirl 先生相比,这两个函数只是将值移动任意数量的步骤,并且不涉及插入任何值,因为我认为这也可以使其他用例受益,并使这两个函数更加“纯粹” 。所以它更适合名称左移/右移
- 子数组+设置+填充是否更快/更内存友好?我不知道
const shiftRight = (collection, steps = 1) => {
collection.set(collection.subarray(0, -steps), steps)
collection.fill(0, 0, steps)
return collection
}
const shiftLeft = (collection, steps = 1) => {
collection.set(collection.subarray(steps))
collection.fill(0, -steps)
return collection
}
const float32 = new Float32Array([2.0, 7.2, 4.5]);
shiftRight(float32) // >>> [ 0, 2.0, 7.2 ]
float32[0] = 8.1 // [ 8.1, 2.0, 7.2 ] Place new value at head
console.log(float32)
shiftLeft(float32) // <<< [ 2.0, 7.2, 0 ]
float32.fill(4.5, -1) // [ 2.0, 7.2, 4.5 ] Place new value at tail
console.log(float32)
shiftRight(float32, 2) // >>> [ 0, 0, 2.0 ] shift right 2 steps
console.log(float32)
关于javascript - 移动类型化 Javascript 数组的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63342389/