如何使用展开或映射运算符将此公式应用于 Uint16 对数组?
How to use a spread or map operator to apply this formula to an array of Uint16 pairs?
我一直在努力更好地理解传播 and/or 地图运算符,特别是如何使用它来应用数学。
我有一个包含两个 Uint16 数字对的数组,如下所示:
let randomPairs = [
[ 37096, 65104 ], [ 62271, 3432 ], [ 1191, 43320 ], [ 5388, 16819 ],
[ 52224, 52222 ], [ 61913, 48798 ], [ 52950, 18227 ], [ 23232, 43931 ],
[ 14995, 45924 ], [ 20609, 46597 ], [ 2392, 52582 ], [ 7050, 51498 ],
[ 34253, 11210 ], [ 43376, 41964 ], [ 63238, 34740 ], [ 63254, 56620 ]
]
我想使用展开或映射运算符将以下公式应用于每一对。公式将pair合并为Uint32,然后转换为0-1之间的float。
(((2**16) * u1) + u2) / ((2 ** 32) - 1)
其中 u1
表示一对中的第一项,u2
表示一对中的第二项。
我真的不知道该怎么做,但这是我的代码,它获取数组并使用 for 循环应用公式:
let i,j,temparray,chunk = 2, u1, u2
for (i=0,j=randomPairs.length; i<j; i+=chunk) {
temparray = randomPairs.slice(i,i+chunk);
u1 = temparray[0]
u2 = temparray[1]
let float = (((2**16) * u1) + u2) / ((2 ** 32) - 1)
console.log(float)
}
如何使用展开或映射运算符将 randomPairs
数组转换为每对所需浮点数的数组?
如果 Float32Array()
能以某种方式使用,我也洗耳恭听。
如果要对数组中的每个元素应用操作,可以使用map
方法:
let randomPairs = [
[ 37096, 65104 ], [ 62271, 3432 ], [ 1191, 43320 ], [ 5388, 16819 ],
[ 52224, 52222 ], [ 61913, 48798 ], [ 52950, 18227 ], [ 23232, 43931 ],
[ 14995, 45924 ], [ 20609, 46597 ], [ 2392, 52582 ], [ 7050, 51498 ],
[ 34253, 11210 ], [ 43376, 41964 ], [ 63238, 34740 ], [ 63254, 56620 ]
]
let floats = randomPairs.map(p => {
return (((2**16) * p[0]) + p[1]) / ((2 ** 32) - 1);
});
console.log(floats);
或者,如果您只想 console.log
输出而不需要结果浮点值的数组,则可以使用 forEach
方法。
我相信这就是你想要的:)
myPairs.map(pair => {
const [u1, u2] = pair;
return (((2**16) * u1) + u2) / ((2 ** 32) - 1);
})
下面是一个示例,展示了如何使用扩展运算符 和 映射函数:
let randomPairs = [
[ 37096, 65104 ], [ 62271, 3432 ], [ 1191, 43320 ], [ 5388, 16819 ],
[ 52224, 52222 ], [ 61913, 48798 ], [ 52950, 18227 ], [ 23232, 43931 ],
[ 14995, 45924 ], [ 20609, 46597 ], [ 2392, 52582 ], [ 7050, 51498 ],
[ 34253, 11210 ], [ 43376, 41964 ], [ 63238, 34740 ], [ 63254, 56620 ]
]
function foo(u1, u2) {
console.log((((2**16) * u1) + u2) / ((2 ** 32) - 1));
}
randomPairs.map(e => foo(...e));
我一直在努力更好地理解传播 and/or 地图运算符,特别是如何使用它来应用数学。
我有一个包含两个 Uint16 数字对的数组,如下所示:
let randomPairs = [
[ 37096, 65104 ], [ 62271, 3432 ], [ 1191, 43320 ], [ 5388, 16819 ],
[ 52224, 52222 ], [ 61913, 48798 ], [ 52950, 18227 ], [ 23232, 43931 ],
[ 14995, 45924 ], [ 20609, 46597 ], [ 2392, 52582 ], [ 7050, 51498 ],
[ 34253, 11210 ], [ 43376, 41964 ], [ 63238, 34740 ], [ 63254, 56620 ]
]
我想使用展开或映射运算符将以下公式应用于每一对。公式将pair合并为Uint32,然后转换为0-1之间的float。
(((2**16) * u1) + u2) / ((2 ** 32) - 1)
其中 u1
表示一对中的第一项,u2
表示一对中的第二项。
我真的不知道该怎么做,但这是我的代码,它获取数组并使用 for 循环应用公式:
let i,j,temparray,chunk = 2, u1, u2
for (i=0,j=randomPairs.length; i<j; i+=chunk) {
temparray = randomPairs.slice(i,i+chunk);
u1 = temparray[0]
u2 = temparray[1]
let float = (((2**16) * u1) + u2) / ((2 ** 32) - 1)
console.log(float)
}
如何使用展开或映射运算符将 randomPairs
数组转换为每对所需浮点数的数组?
如果 Float32Array()
能以某种方式使用,我也洗耳恭听。
如果要对数组中的每个元素应用操作,可以使用map
方法:
let randomPairs = [
[ 37096, 65104 ], [ 62271, 3432 ], [ 1191, 43320 ], [ 5388, 16819 ],
[ 52224, 52222 ], [ 61913, 48798 ], [ 52950, 18227 ], [ 23232, 43931 ],
[ 14995, 45924 ], [ 20609, 46597 ], [ 2392, 52582 ], [ 7050, 51498 ],
[ 34253, 11210 ], [ 43376, 41964 ], [ 63238, 34740 ], [ 63254, 56620 ]
]
let floats = randomPairs.map(p => {
return (((2**16) * p[0]) + p[1]) / ((2 ** 32) - 1);
});
console.log(floats);
或者,如果您只想 console.log
输出而不需要结果浮点值的数组,则可以使用 forEach
方法。
我相信这就是你想要的:)
myPairs.map(pair => {
const [u1, u2] = pair;
return (((2**16) * u1) + u2) / ((2 ** 32) - 1);
})
下面是一个示例,展示了如何使用扩展运算符 和 映射函数:
let randomPairs = [
[ 37096, 65104 ], [ 62271, 3432 ], [ 1191, 43320 ], [ 5388, 16819 ],
[ 52224, 52222 ], [ 61913, 48798 ], [ 52950, 18227 ], [ 23232, 43931 ],
[ 14995, 45924 ], [ 20609, 46597 ], [ 2392, 52582 ], [ 7050, 51498 ],
[ 34253, 11210 ], [ 43376, 41964 ], [ 63238, 34740 ], [ 63254, 56620 ]
]
function foo(u1, u2) {
console.log((((2**16) * u1) + u2) / ((2 ** 32) - 1));
}
randomPairs.map(e => foo(...e));