一些javascript练习题

😀
目前正在学javascript,我习惯是多做题来打基础。很遗憾市场上没有找到很多javascript练习题,所以我让ChatGPT给我出了几道,自己做看看!加油! prompt如下: 你好,我需要你担任我的javascript老师,我现在学习了javascript的基本操作,请你帮我出题,让我更好地掌握javascript。请不要给我问答题,只给我选择题或者编程题。每次出一道题目,我会把代码发出来,或者直接说跳过,然后你评价我的代码并给出下一道题目。请给出具有一定难度的题目;同时,我暂未学习异步编程,请出其他方面的题目

一、声明一个包含多个整数的数组,然后编写一个循环,计算数组中所有元素的和并输出结果

我的答案:

二、函数式编程 - 找出数组中的最大值和最小值

编写一个函数,接受一个整数数组作为参数,然后返回一个包含数组中的最大值和最小值的对象。不要使用内置的 Math.max()Math.min() 方法。
你可以用以下形式的对象表示结果:
编写代码后,你可以将它发送给我,我会为你评价并提供下一道题目。

我的答案:

你的代码看起来已经相当不错了!你正确地使用了循环来遍历数组,逐步更新最大值和最小值。这种方法是非常有效的,它可以找到数组中的最大值和最小值。
同时,你也正确地创建了一个包含最大值和最小值的对象,并返回了这个对象作为结果。整体上,你的代码是清晰且逻辑正确的。

三、递归 - 计算斐波那契数列

编写一个函数,使用递归来计算斐波那契数列的第 n 项,其中斐波那契数列的前两项为 1,从第三项开始,每一项都是前两项的和。
函数签名可能如下:
尝试完成代码后,发送给我,我将评价你的代码并提供下一道题目。

我的答案:

是这样,Python里面或是| ,所以我并没有料到二者有差距,不同语言的区别是要注意的。

四、对象与方法 - 函数创建对象

创建一个学生对象,包含以下信息和方法:
  • 姓名(name)
  • 年龄(age)
  • 成绩(grades,一个包含各科成绩的数组)
  • 平均成绩计算方法(calcAverage),返回平均成绩
  • 介绍方法(introduce),返回形如 "我是姓名,今年年龄岁。" 的字符串
请你编写一个函数来创建这个学生对象,然后使用该对象演示上述方法。
请完成代码后将其发送给我,我会为你评价并提供下一道题目。如果你有疑问,随时向我提问!

我的答案:

这个我不会,请为我讲解一下如何通过函数创建对象

ChatGPT的答案:

当你想要通过函数来创建对象时,你可以使用构造函数或者工厂函数的方式。我会为你介绍这两种方法:
1. 构造创建对象:
构造函数是一种特殊的函数,用于创建并初始化对象。你可以使用 new 关键字来调用构造函数,创建一个新的对象,并且在构造函数中可以设置对象的属性。
以下是一个创建学生对象的例子:
2. 工厂函数创建对象:
工厂函数是一个返回对象的函数。你可以在函数内部创建一个新的对象,设置属性和方法,然后将该对象返回。
以下是使用工厂函数创建学生对象的例子:
这两种方法都可以用来创建对象,选择哪一种取决于你的需求和编码风格。创建对象后,你可以通过对象的属性和方法来操作和获取数据。

五、原型继承 - 创建对象

创建一个基础对象 Person,包含以下属性和方法:
  • 姓名(name)
  • 年龄(age)
  • 介绍方法(introduce),返回形如 "我是姓名,今年年龄岁。" 的字符串
然后,创建一个继承自 Person 的学生对象 Student,包含额外的属性和方法:
  • 学号(studentId)
  • 班级(className)
请你编写这两个对象的构造函数和原型链,以实现上述功能。

我的答案:

你的代码几乎正确,但是在字符串模板中你使用的是单引号(')而不是反引号(`)。在JavaScript中,只有使用反引号才能创建模板字符串。另外,你创建 Student 对象时应该使用 new Person(...) 作为构造函数。
这里是修正后的代码:
现在你的代码应该能够正确地创建 Person 对象和 Student 对象,并输出 Student 对象的属性。如果你对原型链和继承感兴趣,尝试将这个例子升级,使 Student 对象能够继承 Person 对象的属性和方法。如果你有任何问题,随时向我提问!
我:介绍一下字符串模板
ChatGPT
字符串模板(Template Strings),也被称为模板字面量(Template Literals),是 ECMAScript 6(ES6)引入的一项特性,用于更方便地创建包含变量、表达式或函数调用的字符串。它可以让你在字符串中插入动态的内容,而不需要使用字符串拼接或者字符串连接符。
在字符串模板中,你可以使用反引号 ` 来定义字符串,而不是常规的单引号或双引号。这使得你可以在字符串中插入变量或表达式,使用 ${} 语法。
例如,下面是使用字符串模板创建字符串的示例:
在上面的例子中,${} 内的表达式会被求值,并将结果插入到字符串中。
字符串模板不仅可以用于插入变量,还可以插入任何 JavaScript 表达式,甚至是函数调用。它使得字符串拼接更加可读和方便,减少了拼接符号和转义字符的使用。
字符串模板还支持多行字符串的创建,不需要使用换行符或者字符串连接符。只需在反引号中编写多行文本即可:
总之,字符串模板是一项简化字符串处理的重要特性,提供了更方便、可读性更高的方式来创建字符串,尤其在涉及变量和表达式的情况下。

六、数组操作 - 找出重复元素

编写一个函数,接受一个整数数组作为参数,然后返回一个包含数组中所有重复元素的新数组。
例如,对于数组 [1, 2, 3, 2, 4, 5, 4, 6],函数应该返回 [2, 4],因为这两个元素在数组中出现了多次。
请你编写这个 findDuplicates 函数,它应该能够找出数组中所有重复的元素,并将它们放入一个新数组中返回。完成后,将你的代码发送给我,我会为你评价并提供下一道题目。如果你需要帮助或解释,请随时告诉我!

我的答案

chatGPT:

你的代码思路是正确的,但有一点小问题需要修复。在判断元素是否存在于 singleArrduplicatesArr 中时,使用了逗号 , 连接条件,这是错误的。正确的方式应该是使用逻辑与 && 连接条件。此外,你还可以简化判断逻辑。
下面是修正后的代码:
在上面的代码中,我使用了 includes 方法来检查数组中是否已经包含了某个元素。同时,我修正了条件判断的逻辑错误。
尝试运行修正后的代码,并观察输出结果。如果你还有其他问题或者需要进一步的帮助,请随时告诉我!

点评:

有两个重点
  1. 逻辑与 &&
  1. !singleArr.includes(num),这里不是使用not,可以使用!

七、字符串操作 - 单词翻转

编写一个函数,接受一个字符串作为参数,然后返回一个新字符串,其中单词的顺序被翻转。请注意,你不需要翻转单词内部的字符顺序,只需要翻转单词之间的顺序。例如"Hello World, I am learning JavaScript”转化为"JavaScript learning am I World, Hello”

我的答案:

chatGPT:

你的代码看起来已经很接近正确答案了,你使用了 split() 函数来将字符串分割为单词数组,然后使用 reverse() 函数将单词数组进行翻转,最后使用 join() 函数将翻转后的单词数组拼接成新字符串。

八、函数嵌套 - 计算阶乘之和

编写一个函数 factorialSum,接受一个整数 n 作为参数,然后计算并返回 1! + 2! + 3! + ... + n! 的结果,其中 n! 表示阶乘。
阶乘的定义为:n! = n * (n - 1) * (n - 2) * ... * 2 * 1,特别地,0!1! 都等于 1。

我的答案:

 
拆解文件夹中的所有Excel并整合undefined == false?
  • Twikoo
  • Utterance
心情随笔
量化
机器学习
爬虫
开发
Python
Javascript
社会常识
课程笔记
Stata
科研笔记