小程序编程第23课

教程

上节课留了个作业,我们要把第二期的计算明细算出来。怎么做呢?

我们可以再定义四个变量,然后再计算第二期的明细。我这里直接使用了上节课的参考答案。

你可以看到我们需要在index.wxml文件中增加几行代码来放置第二期的明细。我们还需要在Index.js文件中的data对象中增加4个参数,我们还需要再计算 第二期的各个变量的值,然后再设置到data属性中。

这样做虽然可以得到第二期的明细,但是如果用户输入的是10期,那么我们是不是需要定义几十个变量,然后再计算几十次?这样做显然太蠢了!

我们该怎么办呢?

首先我们来观察一下我们的index.wxml文件,我们可以发现,

<view class="td">
		<text>{{index}}</text>
		<text>{{perInterest}}</text>
		<text>{{totalInterest}}</text>
		<text>{{total}}</text>
	</view>
	<view class="td">
		<text>{{index1}}</text>
		<text>{{perInterest1}}</text>
		<text>{{totalInterest1}}</text>
		<text>{{total1}}</text>
	</view>

这展示出来的两行数据,虽然在屏幕上展示不同,但是代码上面基本上一样。最多就是变量名不一样。

然后我们再看一下我们要展示出来的表格

在这里插入图片描述
我们的表格期数是从1期到N期,这有点像数组中的从0到N。数组可以是任意长度,可以有N个元素。

每一行的数据我们可以把它当成一个对象,有N行,那就有N个对象。然后把这N个对象装到我们的数组中。

然后就像这样

在这里插入图片描述
OBJ1,OBJ2,OBJ3代表的是对象,arr代表这个表格是数组

一行里面需要展示4个变量,所以,OBJ里面需要有4个属性。正好代表期数,利息,累计利息和累计本息和

比如一个表格的数据可以是这样表示

let arr = [{
      index: 1,
      perInterest: 1000,
      totalInterest: 1000,
      total: 11000
    }, {
      index: 2,
      perInterest: 1100,
      totalInterest: 2100,
      total: 12100
    }, {
      index: 3,
      perInterest: 1210,
      totalInterest: 3310,
      total: 13310
    }, {
      index: 4,
      perInterest: 1331,
      totalInterest: 4641,
      total: 14641
    }]

然后我们只需要新增一个arr属性到data属性中去就行了,也就是说不需要定义无数个变量了

具体怎么写呢?

首先我们要把这个数组的数据给计算出来。

打开index.js文件

由于每一期的计算方法都是大同小异,唯一的区别是期数在变 ,期数是从1到N。

这就可以用for循环来解决,我们需要计算多少期,那么我们就需要循环多少次。每一次计算的结果我们都把它放到数组里。

那,怎么写呢?

首先我们需要一个容器来装这些每期的计算结果,也就是一个数组变量

let arr = []

然后我们需要一个通过for循环,把每一期的计算结果都放到arr中

for (let index = 1; index < n + 1; index++) {
 
}

这里的n就是用户输入的期数,index是从1开始的,循环的次数正好是n次

循环体里面我们该写什么代码呢?

第一次循环,index等于1,也就是第一期

第一期我们之前是怎么写来着?

let perInterest = p * (1 + i / 100) ** 1 - p * (1 + i / 100) ** 0
let totalInterest = p *(1 + i / 100) ** 1 - p
let total = p * (1 + i / 100) ** 1

这几行代码中,哪些数字是会随着期数的变化而变化?把那些数字全部用期数index来表示。

let perInterest = p * (1 + i / 100) ** index - p * (1 + i / 100) ** (index-1)
let totalInterest = p * (1 + i / 100) ** index - p
let total = p * (1 + i / 100) ** index

这就是我们的计算过程,当index等于1的时候,是不是和之前的计算过程是一样的?

的确是

当index等于2的时候呢?

也是和之前的计算过程是一样的。

也就是说 ,我们最终重复的就是这个计算过程。

现在的问题是,我们计算出结果了,需要把这个结果转换为对象,然后放到数组arr中

怎么做呢?

我们可以定义一个对象,然后这个对象包含4个属性

let obj = {
  index: index,
  perInterest: perInterest,
  totalInterest: totalInterest,
  total: total
}

然后我们就可以把这个对象放到数组中去了

怎么放进去 ?

用数组对象自带的push方法

也就是

arr.push(obj)

于是整个计算过程就是这样

let arr = []

for (let index = 1; index < n + 1; index++) {
  let perInterest = p * (1 + i / 100) ** index - p * (1 + i / 100) ** (index - 1)
  let totalInterest = p * (1 + i / 100) ** index - p
  let total = p * (1 + i / 100) ** index
  let obj = {
    index: index,
    perInterest: perInterest,
    totalInterest: totalInterest,
    total: total
  }
  arr.push(obj)
}

然后我们可以打印出arr的结果,看看是不是符合我们的预期,在for循环外面添加如下代码

console.log(arr)

然后保存 ,我们试试,我们输入本金10000,期数10期,然后利率10

点击计算后 ,我们发现,这个数组的长度有100,也就是说它装了 100个对象 。

但我们理论循环的次数是 10次,所以,这很明显不对。因此肯定是哪里错了 ?

为什么是 100次,那我们要检查一下我们的循环次数计算的地方是不是 有问题。

我们的index初始值是1,如果n是10,那么n+1等于11,每计算一次,index就会加一

到第11次的时候就退出循环,这逻辑没问题

我们可以打印看看n是什么,以及n是否等于是

console.log(n, n === 10)

我们发现n输出的是10,但是并不等于10

那就说明n是一个字符串的10,所以它才不等于。

因为n是一个字符串,所以n+1也会变成一个字符串,变成了字符串的101

当和index进行比较的时候 ,字符串会自动转化为数字,于是就循环了100次

所以我们需要提前把n转为数字,才能实现n+1等于数字

n = Number(n)

我们再试一试,我们发现打印出来的数组长度为10,我们可以展开看看这个数组内部长什么样

我们可以发现,里面装的是10个对象。

这10个对象都有相同的属性,但是值不同

我们还发现这里面的数据有的带了很多个小数,这很难看,所以我们要统一转化为带两位小数的字符串

然后我们再试一下,发现结果符合我们的预期,那数据就得到了。

现在的问题是,我们怎么把这个数组展示到页面上呢?

请听下回分解

记得提交代码

作业

跟着教程写出代码,然后尝试用while循环来计算出这个数据

参考

提示代码

while (index < n + 1) {
  index++
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰奕辰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值