输出显示NaN,但是,我需要数组的和



1。此代码显示NaN
2。我将子射线[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
}

您只需要将total移出循环,每次循环迭代时都会创建一个新的total变量。你还应该给总数指定一个数字,这样你就不会用一个数字来加一个未定义的。

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
}

数组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)

您需要初始化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
}

使用可用于此类任务的数组方法,在本例中为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是正确的函数。

使用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);

最新更新