0

1.此代码显示 NaN
2.我将 subaray[1] 更改为数字但显示 NaN
3.请帮助解决这个问题

let products = [
  'Underpants:6.99',
  'Socks:5.99',
  'T-shirt:14.99',
  'Trousers:31.99',
  'Shoes:23.99' ];
  
  
for(let i = 0; i < products.length; i++) {

    let subArray = products[i].split(':');

    let name = subArray[0];

    let price = Number(subArray[1]);

    let total;

    total += price;

    console.log(total) //total shows NaN

  }

4

5 回答 5

2

您只需要将总数移出循环,每次循环迭代时都会创建一个新的总数变量。您还应该为总数分配一个数字,因此您不会将 undefined 与数字相加。

let products = [
  'Underpants:6.99',
  'Socks:5.99',
  'T-shirt:14.99',
  'Trousers:31.99',
  'Shoes:23.99' ];
 
let total = 0;
  
for(let i = 0; i < products.length; i++) {

    let subArray = products[i].split(':');

    let name = subArray[0];

    let price = Number(subArray[1]);

    total += price;

    console.log(total) //total shows NaN

  }

于 2021-03-02T03:08:30.230 回答
1

数组 reduce() 方法的典型用例

let products = 
  [ 'Underpants:6.99'
  , 'Socks:5.99'
  , 'T-shirt:14.99'
  , 'Trousers:31.99'
  , 'Shoes:23.99'
  ] 
  
let total = products.reduce((a,c)=> a +Number(c.split(':')[1]), 0).toFixed(2)
  
console.log(total) 

于 2021-03-02T03:14:03.967 回答
0

您需要初始化 let total = 0;

let products = [
  'Underpants:6.99',
  'Socks:5.99',
  'T-shirt:14.99',
  'Trousers:31.99',
  'Shoes:23.99' ];

let total = 0;

for(let i = 0; i < products.length; i++) {
    let subArray = products[i].split(':');
    let name = subArray[0];
    let price = Number(subArray[1]); 
    total += price;
    console.log(total) //total shows NaN
  }

于 2021-03-02T03:07:31.887 回答
0

使用可用于此类任务的数组方法,在这种情况下Array.prototype.reduce

let products = ['Underpants:6.99', 'Socks:5.99', 'T-shirt:14.99', 'Trousers:31.99', 'Shoes:23.99'];

let total = products.reduce((acc, val) => acc + Number(val.split(':')[1]), 0);

console.log(total);

Array.prototype.reduce顾名思义,当您需要将数组缩减为单个值时,它就是正确的函数。

于 2021-03-02T03:12:33.873 回答
0

使用Array.prototype.reduce()

const products = [
  "Underpants:6.99",
  "Socks:5.99",
  "T-shirt:14.99",
  "Trousers:31.99",
  "Shoes:23.99",
];

const total = products.reduce(
  (amount, current) => amount + parseFloat(current.replace(/[a-z-:]/gi, "")),
  0
);

console.log(total);

于 2021-03-02T04:04:53.593 回答