如何使用扩展或映射运算符将此公式应用于Uint16对数组?

问题描述

我一直在试图更好地理解散布和/或地图运算符,特别是如何使用它进行数学运算。

我有两个这样的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 ]
]

我想使用Spread或map运算符将以下公式应用于每对。该公式将该对组合为Uint32,然后将其转换为0-1之间的浮点数。

(((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);

或者,如果您只想forEach输出并且不需要结果浮点值的数组,则可以使用console.log方法。

,

我相信这就是您想要的:)

myPairs.map(pair => {
const [u1,u2] = pair;

return (((2**16) * u1) + u2) / ((2 ** 32)  - 1);
})
,

下面是一个示例,显示了如何使用扩展运算符 map函数:

let randomPairs = [
  [ 37096,56620 ]
]

function foo(u1,u2) {
  console.log((((2**16) * u1) + u2) / ((2 ** 32)  - 1));
}

randomPairs.map(e => foo(...e));

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...