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