今天学习非常困难,帮我看下什么原因

这是我今天学JavaScript的数组笔记,我完全做不出习题,重复看了好几遍,也做不出来,看了答案也看不懂,或许需要再看第三遍?

这是数组教学网页,我看这个学的,然后做下面的习题就卡住了,哈哈,请专家朋友们会诊,帮我分析下是习题难度太大,还是我学得不认真呀! smiley

javascript
187 views
Comments
登录后评论
Sign In
·

我帮你修改一下你的笔记,我认为你的笔记不够严谨,首先是一些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()不用加入参数,直接会将数组开头的第一个值删除

习题

习题1

答案

正确答案如下:

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++(执行多次),再进入一个循环
  • Q:这个[i]是哪来的吗,为什么这么写?
    • A:[i]并不应该单独看,products[i]通过[]运算符获得products数组中索引(从0开始计算)为i的值,即products中的第i个元素,products[0]为第0个元素,以此类推
  • Q:那为什么这个price就能把这数组的所有价格都加起来呢?用的就是这个循环吗?
    • A:total变量在开头就赋值了0,通过每一次的循环从字符串中获取每一项的价格存入price,再通过+=累加price的值
  • Q:迭代是什么意思?循环的次数?
    • A:迭代是一个概念,表示重复反馈过程的活动,在编程中通常和循环和递归有关,因为反复地将price值加入total中,所以这个过程可以看作迭代

重点

var price = Number(subArray[1]);
total += price;
  • 重点1:Number将字符串变成数字
  • 重点2:+= 运算符的作用是直接给左边的变量加上右边的变量,a+=b等价于a=a+b

感想

好吧,我根本做不出来这个习题。

将那一串字符串写成数组我会,并且做成了。

将循环也写成了,这个也会。

第三个问题,让我把数组用一行代码分成两个部分,一部分是名字,一部分是价格。

这个我不会了,想了半天,没有头绪。看了之前的有用的字符串方法也不知道怎么办, 上一次就是卡在这里了,今天又是。

看了答案,原来是我没有学过这个方法。

看了之前的教学内容,我觉得这个应该是有个bug,这从来没有教过的内容,突然提起,让人百思不解

我还不理解什么是循环。

变量名起的也很有意思,叫subArray,副数组。

而且这个应该是三行代码,问题里却说用一行代码,非常误导。第一行代码是把数组里的字符串分开成两部分。第二行代码的意思是给name赋值为副数组的前一部分,第三行代码是给价格赋值为副数组的第二部分为数字。

Number这个我没有记住

+= 这个意思我完全忘记了,看着答案出神不知道什么意思。看了看之前的笔记,记着+= 对应 = x + y。

ok,我花了十五分钟时间来搞明白,什么是赋值运算,这是几天前看过的文章内容,完全忘光了。

今天的学习让人头大

这个习题真的让人莫名其妙,难度增加的太多了,无法理解。请帮我看下是不是真的对新手太不友好了,习题做起来太痛苦了,完不成,理解不了。

·

不知道你是初学js还是之前已经使用过js,说实话如果是完全初学者的话我是不太建议mdn学习的,mdn在我看来更像一个手册。当然市面上的js纯入门书籍说实话也不太好。唯一的一本红宝书(js高级程序设计)值得一看。