仅显示复杂数组中的实际值 javascript
only display real value from complex array javascript
这个问题类似于我之前的一个问题 ()。但是,不仅有数字,还有以 "NaN" 作为实数值的复数。我认为这可能会发生,因为我使用的是大数字和 Mathjs,但我所有其他值都已经浮动到小数点后 15 位。来自 console.log(realPowers) 的 returned 数组在控制台日志中看起来像这样:
0:0
1:91.51069578156118
2:183.02210760273937
3:277.73380284266796
4:376.47588381083307
5:481.85928667762994
6:599.6533611633058
7:752.8633763048005
8:Complex {re: NaN, im: -0.015021590179814361}
9:Complex {re: NaN, im: -0.029563247908981544}
10:Complex {re: NaN, im: -0.047829041780228475}
这很有趣,因为下面的第一行代码应该 return 只是复数的实数值。我正在尝试使用 toFixed 方法将这些值输入到 for 循环中以减少小数位数:
var realPowers = results.totalPower.map((x) => x && x.re ? x.re :x);
function fixPowers(realPowers) {
var k,fixedPower,powerToFix
for (k=0,fixedRealPowers=[]; k < realPowers.length; k++) {
powerToFix = realPowers[k];
fixedPower = powerToFix.toFixed(3);
fixedRealPowers.push(fixedPower);
}
return fixedRealPowers
};
其中totalPower为原数组。但是当我这样做时 return 是一个错误:
powerToFix.toFixed is not a function
因为 toFixed 不能用于字符串(我假设)。
我正在尝试制作一个如下所示的数组:
0:0
1:91.51069578156118
2:183.02210760273937
3:277.73380284266796
4:376.47588381083307
5:481.85928667762994
6:599.6533611633058
7:752.8633763048005
8:NaN
9:NaN
10:NaN
我可以使用相同或相似的方法减少实数的小数位数并仅保留复数的 NaN 部分吗?
var realPowers = results.totalPower.map((x) => x && x.re ? x.re :x);
function fixPowers(totalPower) {
var k,fixedPower,powerToFix
for (k=0,fixedRealPowers=[]; k < realPowers.length; k++) {
powerToFix = realPowers[k];
fixedPower = isNaN(powerToFix) ? powerToFix : powerToFix.toFixed(3);
fixedRealPowers.push(fixedPower);
}
return fixedRealPowers
};
问题是 NaN
在 Javascript 中被认为是假的,所以 x && x.re
对于 re: NaN
的复数是 falsey
。然后是returnsx
,也就是整复数。如果要测试属性是否存在,使用hasOwnProperty()
方法。
function Complex(real, imag) {
return {re: real, im: imag};
}
var results = {
totalPower: [
0,
91.51069578156118,
183.02210760273937,
277.73380284266796,
376.47588381083307,
481.85928667762994,
599.6533611633058,
752.8633763048005,
Complex(NaN, -0.015021590179814361),
Complex(NaN, -0.029563247908981544),
Complex(NaN, -0.047829041780228475)
]
};
var realPowers = results.totalPower.map((x) => x && x.hasOwnProperty('re') ? x.re :x);
function fixPowers() {
var k,fixedPower,powerToFix
for (k=0,fixedRealPowers=[]; k < realPowers.length; k++) {
powerToFix = realPowers[k];
fixedPower = powerToFix.toFixed(3);
fixedRealPowers.push(fixedPower);
}
return fixedRealPowers
};
console.log(fixPowers());
这个问题类似于我之前的一个问题 (
0:0
1:91.51069578156118
2:183.02210760273937
3:277.73380284266796
4:376.47588381083307
5:481.85928667762994
6:599.6533611633058
7:752.8633763048005
8:Complex {re: NaN, im: -0.015021590179814361}
9:Complex {re: NaN, im: -0.029563247908981544}
10:Complex {re: NaN, im: -0.047829041780228475}
这很有趣,因为下面的第一行代码应该 return 只是复数的实数值。我正在尝试使用 toFixed 方法将这些值输入到 for 循环中以减少小数位数:
var realPowers = results.totalPower.map((x) => x && x.re ? x.re :x);
function fixPowers(realPowers) {
var k,fixedPower,powerToFix
for (k=0,fixedRealPowers=[]; k < realPowers.length; k++) {
powerToFix = realPowers[k];
fixedPower = powerToFix.toFixed(3);
fixedRealPowers.push(fixedPower);
}
return fixedRealPowers
};
其中totalPower为原数组。但是当我这样做时 return 是一个错误:
powerToFix.toFixed is not a function
因为 toFixed 不能用于字符串(我假设)。
我正在尝试制作一个如下所示的数组:
0:0
1:91.51069578156118
2:183.02210760273937
3:277.73380284266796
4:376.47588381083307
5:481.85928667762994
6:599.6533611633058
7:752.8633763048005
8:NaN
9:NaN
10:NaN
我可以使用相同或相似的方法减少实数的小数位数并仅保留复数的 NaN 部分吗?
var realPowers = results.totalPower.map((x) => x && x.re ? x.re :x);
function fixPowers(totalPower) {
var k,fixedPower,powerToFix
for (k=0,fixedRealPowers=[]; k < realPowers.length; k++) {
powerToFix = realPowers[k];
fixedPower = isNaN(powerToFix) ? powerToFix : powerToFix.toFixed(3);
fixedRealPowers.push(fixedPower);
}
return fixedRealPowers
};
问题是 NaN
在 Javascript 中被认为是假的,所以 x && x.re
对于 re: NaN
的复数是 falsey
。然后是returnsx
,也就是整复数。如果要测试属性是否存在,使用hasOwnProperty()
方法。
function Complex(real, imag) {
return {re: real, im: imag};
}
var results = {
totalPower: [
0,
91.51069578156118,
183.02210760273937,
277.73380284266796,
376.47588381083307,
481.85928667762994,
599.6533611633058,
752.8633763048005,
Complex(NaN, -0.015021590179814361),
Complex(NaN, -0.029563247908981544),
Complex(NaN, -0.047829041780228475)
]
};
var realPowers = results.totalPower.map((x) => x && x.hasOwnProperty('re') ? x.re :x);
function fixPowers() {
var k,fixedPower,powerToFix
for (k=0,fixedRealPowers=[]; k < realPowers.length; k++) {
powerToFix = realPowers[k];
fixedPower = powerToFix.toFixed(3);
fixedRealPowers.push(fixedPower);
}
return fixedRealPowers
};
console.log(fixPowers());