我帮你修改一下你的笔记,我认为你的笔记不够严谨,首先是一些markdown的用法上面,其次是知识点应该和感想分离(不过也因人而异),这样下次看容易看懂,最后知识点的结构应该规整
不过我不喜欢那种规范的中英文混排,就是在中文和英文之间加空格,所以就都没有加
字符串和数组的基本操作
分割字符串
split()
能将数组的内容根据参数分割,最后返回一个字符串数组
let myData = 'Manchester,London,Liverpool,Birmingham,Leeds,Carlisle';
let myArray = myData.split(',');
myDate.split(',')
把字符串myData
的内容按,
分割,返回一个字符串数组,即['Manchester', 'London', 'Liverpool', 'Birmingham', 'Leeds', 'Carlisle']
拼接数组为字符串
join()
能将数组的内容根据参数一个一个地拼接起来,最后返回一个字符串
let newString = myArray.join(',');
let newStringToo = myArray.toString();
myArray.join(',')
将myArray
数组的值按,
拼接,最后返回一个拼接后的字符串,即'Manchester,London,Liverpool,Birmingham,Leeds, Carlisle'
toString()
也可以将数组变回字符串,而且不需要参数,其他类型的变量也可以使用
但是join()
可以通过传入不同符号的参数,拼接为不同间隔符号的字符串
数组末尾的操作
push()
方法在数组的末尾添加给定的参数,同时返回数组的总长度,若参数为空,那么只返回参数,和访问length
的作用一样
pop()
是把最后的一个数组的值删除
数组开头的操作
unshift()
和shift()
跟push()
和pop()
的用法一样,不过是在数组的开头操作
someArray.unshift('kaka');
而shift()
不用加入参数,直接会将数组开头的第一个值删除
习题
答案
正确答案如下:
var list = document.querySelector('.output ul');
var totalBox = document.querySelector('.output p');
var total = 0;
list.innerHTML = '';
totalBox.textContent = '';
var products = ['Underpants:6.99',
'Socks:5.99',
'T-shirt:14.99',
'Trousers:31.99',
'Shoes:23.99'];
for(var i = 0; i < products.length; i++) {
var subArray = products[i].split(':');
var name = subArray[0];
var price = Number(subArray[1]);
total += price;
itemText = name + ' — $' + price;
var listItem = document.createElement('li');
listItem.textContent = itemText;
list.appendChild(listItem);
}
totalBox.textContent = 'Total: $' + total.toFixed(2);
输出结果:
Underpants — 6.99 Socks — 5.99 T-shirt — 14.99 Trousers — 31.99 Shoes — 23.99 Total: 83.95
解析
这里将products[i]
作为字符串主体来使用split(':')
方法分成两个字符串来成为不同的部分,一部分是名字,一部分是价格
for(var i = 0; i < products.length; i++) {
// 循环内运行的代码
}
- Q:为什么是i呢,这个是从哪冒出来的呢?
- A:i是for循环中的一个变量,用作循环次数的判断,初始用
var i = 0
(一个for仅执行一次)定义了变量i,初值为0,然后运行判断i < products.length
(执行多次),是否满足条件,在运行完循环内的代码后,再运行i++
(执行多次),再进入一个循环
- A:i是for循环中的一个变量,用作循环次数的判断,初始用
- Q:这个
[i]
是哪来的吗,为什么这么写?- A:
[i]
并不应该单独看,products[i]
通过[]
运算符获得products
数组中索引(从0开始计算)为i
的值,即products
中的第i个元素,products[0]
为第0个元素,以此类推
- A:
- Q:那为什么这个
price
就能把这数组的所有价格都加起来呢?用的就是这个循环吗?- A:
total
变量在开头就赋值了0,通过每一次的循环从字符串中获取每一项的价格存入price
,再通过+=
累加price
的值
- A:
- Q:迭代是什么意思?循环的次数?
- A:迭代是一个概念,表示重复反馈过程的活动,在编程中通常和循环和递归有关,因为反复地将
price
值加入total
中,所以这个过程可以看作迭代
- A:迭代是一个概念,表示重复反馈过程的活动,在编程中通常和循环和递归有关,因为反复地将
重点
var price = Number(subArray[1]);
total += price;
- 重点1:
Number
将字符串变成数字 - 重点2:
+=
运算符的作用是直接给左边的变量加上右边的变量,a+=b
等价于a=a+b
感想
好吧,我根本做不出来这个习题。
将那一串字符串写成数组我会,并且做成了。
将循环也写成了,这个也会。
第三个问题,让我把数组用一行代码分成两个部分,一部分是名字,一部分是价格。
这个我不会了,想了半天,没有头绪。看了之前的有用的字符串方法也不知道怎么办, 上一次就是卡在这里了,今天又是。
看了答案,原来是我没有学过这个方法。
看了之前的教学内容,我觉得这个应该是有个bug,这从来没有教过的内容,突然提起,让人百思不解
我还不理解什么是循环。
变量名起的也很有意思,叫subArray,副数组。
而且这个应该是三行代码,问题里却说用一行代码,非常误导。第一行代码是把数组里的字符串分开成两部分。第二行代码的意思是给name赋值为副数组的前一部分,第三行代码是给价格赋值为副数组的第二部分为数字。
Number这个我没有记住
+= 这个意思我完全忘记了,看着答案出神不知道什么意思。看了看之前的笔记,记着+= 对应 = x + y。
ok,我花了十五分钟时间来搞明白,什么是赋值运算,这是几天前看过的文章内容,完全忘光了。
今天的学习让人头大
这个习题真的让人莫名其妙,难度增加的太多了,无法理解。请帮我看下是不是真的对新手太不友好了,习题做起来太痛苦了,完不成,理解不了。