gpt4 book ai didi

javascript - 多次切片 JavaScript TypedArray

转载 作者:行者123 更新时间:2023-11-30 15:22:58 27 4
gpt4 key购买 nike

我试图用这个简单的代码片段将 typedArray 拆分成更小的 block :

const buf = new Uint8Array([0x02, 0x00, 0x07, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x00, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x61, 0x70, 0x70, 0x02])
const len = 5

for (let i=0; i<buf.length;){
const chunk = buf.slice(i, len)
console.log("Chunk", chunk, "from", i, "to", i + chunk.length)
if (chunk.length) {
i += chunk.length
} else {
console.log("Chunk is empty")
break
}
}

但我发现 slice 仅在第一次迭代时起作用,在接下来的迭代中返回空 block 。

我注意到它也发生在 Node.js 中,如果我将第一行替换为:

const buf = Buffer.from([0x02, 0x00, 0x07, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x00, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x61, 0x70, 0x70, 0x02])

为什么会出现这种行为?

最佳答案

类型化数组 slice 方法的第二个参数是结束点,而不是切片的长度(常规非类型化数组切片工作相同)。

From MDN:

typedarray.slice([begin[, end]])

这意味着在第二次调用时,它从 5 切片到 5,或者一个空切片。

相反,执行 buf.slice(i, i + len)

const buf = new Uint8Array([0x02, 0x00, 0x07, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x00, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x61, 0x70, 0x70, 0x02])
const len = 5

for (let i=0; i<buf.length;){
const chunk = buf.slice(i, i + len)
console.log("Chunk", chunk, "from", i, "to", i + chunk.length)
if (chunk.length) {
i += chunk.length
} else {
console.log("Chunk is empty")
break
}
}

关于javascript - 多次切片 JavaScript TypedArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43420455/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com