仅显示复杂数组javascript的实际值

时间:2017-12-15 19:52:30

标签: javascript arrays dictionary complex-numbers tofixed

这个问题类似于我以前的一个问题(removing objects in an object in an array javascript)。然而,除了只有数字之外,还有复数的“NaN”作为实际值。我认为这可能会发生,因为我使用大数字和Mathjs,但我所有其他值已经浮动到〜15位小数。 console.log(realPowers)返回的数组在控制台日志中如下所示:

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}

这很有趣,因为下面的第一行代码应该只返回复数的实数值。我试图使用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是原始数组。但是当我这样做时它会返回一个错误:

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部分吗?

2 个答案:

答案 0 :(得分:1)

问题是NaN在Javascript中被认为是假的,因此对于x && x.re的复数,falseyre: NaN。然后它返回x,这是整个复数。如果要测试属性是否存在,请使用hasOwnProperty()方法。

&#13;
&#13;
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());
&#13;
&#13;
&#13;

答案 1 :(得分:0)

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
};