JavaScript数组方法练习

第一个练习

● 计算所有账户的存款总额

const bankDepositSum = accounts   //定义一个变量
  .flatMap(acc => acc.movements)  //使用flatmap将所有的存款提取,然后组成一个新的数组
  .filter(mov => mov > 0)  //使用filter方法提取所有的正值
  .reduce((sum, cur) => sum + cur,0);  //将所有的正值进行累加

console.log(bankDepositSum);

在这里插入图片描述

第二个练习

● 计算所有账号中大于1000存款的有多少笔?
● 第一种方法

const numDeposit1000 = accounts  //定义一个变量
  .flatMap(acc => acc.movements)  //使用flatmap获取到我们的存取款数组
  .filter(mov => mov >= 1000).length;  //过滤大于等于1000的存款,计算长度

console.log(numDeposit1000);

在这里插入图片描述

● 第二种方法

const numDeposit1000 = accounts  //定义一个变量
  .flatMap(acc => acc.movements)  //使用flatmap获取到我们的存取款数组
  .reduce((count, cur) => (cur >= 1000 ? count + 1 : count), 0);  //使用reduce方法,使用三元运算符来判断此时数组是否大于等于1000,如果是的的话就将count累加

console.log(numDeposit1000);

在这里插入图片描述

可以将计数的代码改进一下

const numDeposit1000 = accounts
  .flatMap(acc => acc.movements)
  .reduce((count, cur) => (cur >= 1000 ? ++count : count), 0);

console.log(numDeposit1000);

注: ++count不要写成了count++,很好理解,++count是先运算后赋值,而count++先赋值后运算!

第三个练习

● 分别计算存款和取款之和

const sums = accounts  //定义一个变量
  .flatMap(acc => acc.movements)  //使用flatmap获取到我们的存取款数组
  .reduce(   //使用reduce来判断当前值是否大于0,如果大于0的话将现在的值累计至deposits中,否则累加到withdrawals
    (sums, cur) => {
      cur > 0 ? (sums.deposits += cur) : (sums.withdrawals += cur);
      return sums; //这里一定要返回我们需要的值,默认情况下没有返回值,只是计算而已
    },
    { deposits: 0, withdrawals: 0 }  //先将这两个值归零
  );

console.log(sums);

在这里插入图片描述

接着我们来改进一下上面的代码

c

onst { deposits, withdrawals } = accounts
  .flatMap(acc => acc.movements)
  .reduce(
    (sums, cur) => {
      // cur > 0 ? (sums.deposits += cur) : (sums.withdrawals += cur);
      sums[cur > 0 ? 'deposits' : 'withdrawals'] += cur;
      return sums;
    },
    { deposits: 0, withdrawals: 0 }
  );

console.log(deposits, withdrawals);
//使用了对象解构和动态属性名。


对象解构:使用对象解构可以直接从数组的结果中提取需要的属性值,而无需再去访问对象属性。这使得代码更加简洁清晰。

动态属性名:在对象字面量中使用方括号和变量来创建动态属性名。这种写法可以根据条件动态地设置对象的属性名,避免了重复的代码。

去除多余的返回语句:由于对象在 JavaScript 中是引用类型,因此在 reduce 函数中直接修改 sums 对象的属性值即可,无需返回 sums。这样可以减少代码的冗余性。

在这里插入图片描述

第四个练习

● 将一段话的首字母转换为大写字母,其他都是小写,但是请注意,有一些字符不需要进行转换

const convertTitleCase = function (title) {  //定义一个变量
  const expecitons = ['a', 'an', 'the', 'but', 'or', 'on', 'in', 'with'];  //将不需要进行大写转换的存入一个对象中
  const titleCase = title  
    .toLowerCase()  //首先将字符串全部变成小写
    .split(' ')  //通过空格来分割组成一个数组
    .map(word =>  //通过map和includes方法来判断字符串是否再排除列表中,如果在不转换,如果不在就转换
      expecitons.includes(word) ? word : word[0].toUpperCase() + word.slice(1)
    )
    .join(' ');  //将转换后的数组组成一个字符串
  return titleCase;
};

console.log(convertTitleCase('this is a nice title'));
console.log(convertTitleCase('this is a LONG title but not too long'));
console.log(convertTitleCase('and here is another title with an EXAMPLE'));

在这里插入图片描述

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值