文章目录
-
-
-
- 二、JavaScript 数组练习
-
- 1. 返回数组 a 的第 n 个元素
- 2. 删除数组 a 的前三个元素,并返回结果
- 3. 提取数组 a 的后三个元素,并返回结果
- 4. 提取数组 a 的前三个元素,并返回结果
- 5. 以数组 a 和 数字 n 为参数,返回 a 的最后 n 个元素
- 6. 以数组 a 和 值 b 为参数,清除 a 中出现的所有 b,过滤后返回数组
- 7. 数组的元素个数
- 8. 返回数组中负值的个数
- 9. 返回降序排序的数组
- 10. 按字母顺序对数组元素排序,返回排好序的数组
- 11. 以数字数组作为参数,返回数字的平均值
- 12. 字符串数组为参数的函数,返回最长的字符串
- 13. 数组中所有元素相等,返回 true,否则返回 false
- 14. 函数接收任意数量数组,返回一个包含所有值的数组
- 15. 以对象数组为参数,按属性 b 升序对数组排序,返回数组
- 16. 合并两个数组,删除重复值,并进行升序排序,返回结果数组
- 17. 数组 a 和数字 b 为参数的函数,将值大于 b 的所有数组元素相加
- 18. 返回最小(min)和最大(max)范围内的数字数组
- 19. 按字符串的第一个字母将其分组,返回一个对象
- 20. 第一个元素是给定数字(小于等于6时赋值为0),其他元素是原始数组
- 21. 以数组 a 和 数值 b 为参数的函数,将 n 及 n 的 倍数位处的元素保存到数组中并返回
-
-
二、JavaScript 数组练习
1. 返回数组 a 的第 n 个元素
Test: myFunction([1, 2, 3, 4, 5], 3) Expected 3
Test: myFunction([10, 9, 8, 7, 6], 5) Expected 6
代码实现:数组索引下标获取
function myFunction(a, n) {
return a[n - 1]
}
myFunction([10, 9, 8, 7, 6], 5)
2. 删除数组 a 的前三个元素,并返回结果
Test: myFunction([1, 2, 3, 4]) Expected [4]
Test: myFunction([99, 1, 1]) Expected []
代码实现:使用
splice()
或者slice()
function myFunction(a) {
return a.splice(3)
}
myFunction([1, 2, 3, 4])
function myFunction(a) {
return a.slice(3)
}
myFunction([1, 2, 3, 4])
3. 提取数组 a 的后三个元素,并返回结果
Test: myFunction([1, 2, 3, 4]) Expected [2, 3, 4]
Test: myFunction([99, 1, 1]) Expected [99, 1, 1]
代码实现:使用
splice()
或者slice()
function myFunction(a) {
return a.splice(-3)
}
myFunction([1, 2, 3, 4])
function myFunction(a) {
return a.slice(-3)
}
myFunction([1, 2, 3, 4])
4. 提取数组 a 的前三个元素,并返回结果
Test: myFunction([1, 2, 3, 4]) Expected [1, 2, 3]
Test: myFunction([99, 1, 1]) Expected [99, 1, 1]
代码实现:使用
splice()
或者slice()
function myFunction(a) {
return a.splice(0, 3)
}
myFunction([1, 2, 3, 4])
function myFunction(a) {
return a.slice(0, 3)
}
myFunction([1, 2, 3, 4])
5. 以数组 a 和 数字 n 为参数,返回 a 的最后 n 个元素
Test: myFunction([1, 2, 3, 4, 5], 2) Expected [4, 5]
Test: myFunction([1, 2, 3], 6) Expected [1, 2, 3]
代码实现:使用
splice()
或者slice()
function myFunction(a, n) {
return a.splice(-n)
}
myFunction([1, 2, 3, 4, 5], 2)
function myFunction(a, n) {
return a.slice(-n)
}
myFunction([1, 2, 3, 4, 5], 2)
6. 以数组 a 和 值 b 为参数,清除 a 中出现的所有 b,过滤后返回数组
Test: myFunction([1, 2, 'hello'], 2) Expected [1, 'hello']
Test: myFunction([1, 2, '2'], '2') Expected [1, 2]
Test: myFunction([false, '2', 1], false) Expected ['2', 1]
代码实现:通过
filter()
和every()
过滤出两个数组中不相等的元素,并赋值到一个新数组中,返回这个新数组。
function myFunction(a, b) {
let newArr = a.filter(function (item) {
return Array.of(b).every(function (item1) {
return item !== item1
})
})
return newArr
}
myFunction([1, 2, '2'], 2)
function myFunction(a, b){
return a.filter(num => num !== b)
}
7. 数组的元素个数
Test: myFunction([1, 2, 2, 4]) Expected 4
Test: myFunction([9, 9, 9]) Expected 3
代码实现:
.length
function myFunction(a) {
return a.length
}
myFunction([1, 2, 2, 4])
8. 返回数组中负值的个数
Test: myFunction([1, -2, 2, -4]) Expected 2
Test: myFunction([0, 9, 1]) Expected 0
代码实现:使用
filter()
过滤出小于0的值个数
function myFunction(a){
return a.filter(el => el < 0).length
}
9. 返回降序排序的数组
Test: myFunction([1, 3, 2]) Expected [3, 2, 1]
Test: myFunction([4, 2, 3, 1]) Expected [4,2,3,1]
代码实现:使用
sort()
function myFunction(arr) {
return arr.sort((a, b) => b - a)
}
myFunction([1, 2, 3])
10. 按字母顺序对数组元素排序,返回排好序的数组
Test: myFunction(['b', 'c', 'd', 'a']) Expected ['a', 'b', 'c', 'd']
Test: myFunction(['z', 'y', 'x']) Expected ['x', 'y', 'z']
代码实现:
sort()
方法
function myFunction(arr) {
return arr.sort()
}
myFunction(['b', 'c', 'd', 'a'])
11. 以数字数组作为参数,返回数字的平均值
Test: myFunction([10, 100, 40]) Expected 50
Test: myFunction([-50, 0, 50, 200]) Expected 50
代码实现:使用 传统
for循环
或reduce()
方法
reduce()
:方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
function myFunction(arr) {
let sum = 0
for(let i = 0; i < arr.length; i++) {
sum += arr[i]
}
return sum / arr.length
}
myFunction([10, 100, 40])
function myFunction(arr) {
return arr.reduce((acc, cur) => acc + cur, 0) / arr.length
}
myFunction([10, 100, 40])
12. 字符串数组为参数的函数,返回最长的字符串
Test: myFunction(['help', 'me']) Expected 'help'
Test: myFunction(['I', 'need', 'candy']) Expected 'candy'
代码实现:使用
reduce()
再使用三目运算符
function myFunction(arr) {
return arr.reduce((a, b) => a.length >= b.length ? a : b)
}
myFunction(['help', 'love'])
13. 数组中所有元素相等,返回 true,否则返回 false
Test: myFunction([true, true, true, true]) Expected true
Test: myFunction([1, 1, 1, 2]) Expected false
Test: myFunction(['10', 10, 10, 10]) Expected false
代码实现:使用
new Set()
获取不重复的数组,它的长度若为 1,就表明数组中所有的元素相等。
function myFunction(arr){
return new Set(arr).size === 1
}
myFunction([1, 1, 1, 2])
14. 函数接收任意数量数组,返回一个包含所有值的数组
Test: myFunction([1, 2, 3], [4, 5, 6]) Expected [1, 2, 3, 4, 5, 6]
Test: myFunction(['a', 'b', 'c'], [4, 5, 6]) Expected ['a', 'b', 'c', 4, 5, 6]
代码实现:使用
flat()
把数组打平。
function myFunction(...arrays) {
return arrays.flat()
}
myFunction(['a', 'b', 'c'], [4, 5, 6])
15. 以对象数组为参数,按属性 b 升序对数组排序,返回数组
Test: myFunction([{
a: 1, b: 2 }, {
a: 5, b: 4 }]) Expected [{
a: 1, b: 2 }, {
a: 5, b: 4 }]
Test: myFunction([{
a: 2, b: 10 }, {
a: 5, b: 4 }]) Expected [{
a: 5, b: 4 }, {
a: 2, b: 10 }]
代码实现:使用
sort()
对 b 进行排序
function myFunction(arr){
const sort = (x, y) => x.b - y.b
return arr.sort(sort)
}
16. 合并两个数组,删除重复值,并进行升序排序,返回结果数组
Test: myFunction([1, 2, 3], [3, 4, 5]) Expected [ 1, 2, 3, 4, 5 ]
Test: myFunction([-10, 22, 333], [-11, 5, 22]) Expected [ -11, -10, 5, 22, 333]
代码实现:
- 用
concat()
拼接数组,再对拼接好的数组sort()
排序,之后new Set()
去重,最后Array.from
转为数组。- 用
...
运算符拼接数组,再对拼接好的数组sort()
排序,之后...new Set()
去重,最后用[]
括起来,得到数组。
Array.from()
:从对象或可迭代对象(如Map,Set等)返回一个新数组。
Array.of()
:将一组数值转换为数组。基本上可以用来替代 Array() 或 new Array(),并且不存在由于参数不同而导致的重载。
function myFunction(a, b) {
let res = new Set(a.concat(b).sort((a, b) => a - b))
return Array.from(res)
}
myFunction([-10, 22, 333, 42], [-11, 5, 22, 41, 42])
function myFunction(a, b) {
return res = [...new Set([...a, ...b])].sort((x, y) => x - y)
}
myFunction([-10, 22, 333, 42], [-11, 5, 22, 41, 42])
17. 数组 a 和数字 b 为参数的函数,将值大于 b 的所有数组元素相加
Test: myFunction([1, 2, 3, 4, 5, 6, 7], 2) Expected 25
Test: myFunction([-10, -11, -3, 1, -4], -3) Expected 1
代码实现:
- 使用
filter()
过滤出来数组a
中大于数值b
的值,再对得到的值通过reduce()
求和。- 使用
reduce()
求出通过if
判断语句筛选出来的值。
array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
- total:必需。初始值, 或者计算结束后的返回值。
- currentValue:必需。当前元素。
- currentIndex:可选。当前元素的索引。
- arr:可选。当前元素所属的数组对象。
- initialValue: 可选。传递给函数的初始值。
function myFunction(a, b){
let nums = a.filter(x => x > b)
let res = nums.reduce((acc, cur) => acc + cur)
return res
}
myFunction([1, 2, 3, 4, 5, 6, 7], 2)
function myFunction(a, b){
return a.reduce((sum, cur) => {
if(cur > b) return sum + cur
return sum
}, 0) //此处的 0是传递函数的初始值,如果不赋值 0得到的结果就是26了(因为传递参数的初始值是1)
}
myFunction([1, 2, 3, 4, 5, 6, 7], 2)
18. 返回最小(min)和最大(max)范围内的数字数组
Test: myFunction(2, 10) Expected [2, 3, 4, 5, 6, 7, 8, 9, 10]
Test: myFunction(1, 3) Expected [1, 2, 3]
代码实现:使用 for 循环,
push()
出来满足条件的数,赋值给一个空数组。
function myFunction(min, max){
let arr = []
for(let i = min; i <= max; i++){
arr.push(i)
}
return arr
}
19. 按字符串的第一个字母将其分组,返回一个对象
Test: myFunction(['Alf', 'Alice', 'Ben']) Expected {
a: ['Alf', 'Alice'], b: ['Ben']}
Test: myFunction(['Berlin', 'Paris', 'Prague']) Expected {
b: ['Berlin'], p: ['Paris', 'Prague']}
代码实现:通过
reduce()
方法,里面通过toLowerCase().charAt(0)
把首字母小写。然后返回正确格式。
function myFunction(arr) {
return arr.reduce((acc, cur) => {
const firstLetter = cur.toLowerCase().charAt(0)
return {
...acc, [firstLetter]: [...(acc[firstLetter] || []), cur] }
}, {
})
}
myFunction(['Alf', 'Alice', 'Ben'])
20. 第一个元素是给定数字(小于等于6时赋值为0),其他元素是原始数组
Test: myFunction([1, 2, 3], 6) Expected [6, 1, 2, 3]
Test: myFunction(['a','b'], 2) Expected [0, 'a', 'b']
代码实现:
- 条件语句,合并结果为数组,再使用
flat()
打平数组。- 三目运算符,配合
...
操作符合并数组。
function myFunction(arr, num){
if(num > 5){
return [num, arr].flat()
} else {
return [0, arr].flat()
}
}
myFunction(['a','b'], 2)
function myFunction(arr, num){
return [...(num > 5 ? [num] : [0]), ...arr]
}
myFunction(['a','b'], 2)
21. 以数组 a 和 数值 b 为参数的函数,将 n 及 n 的 倍数位处的元素保存到数组中并返回
Test: myFunction([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 3) Expected [3, 6, 9]
Test: myFunction([10, 9, 8, 7, 6, 5, 4, 3, 2, 1], 1) Expected [6, 1]
代码实现:把数组
a
存入rest
,置空的result
数组用于存放结果。通过for
循环遍历数组,如果数组的长度小于n
,break。如果不小于n
,在空数组中push()
输出第n - 1
的索引对应的数。之后通过slice()
截取出来下一段数字序列进行再一次的遍历。
function myFunction(a, n) {
let rest = [...a]
let result = []
for (let i = 0; i < a.length; i++) {
if (rest.length < n) break
result.push(rest[n - 1])
rest = rest.slice(n)
}
console.log(result)
}
myFunction([10, 9, 8, 7, 6, 5, 4, 3, 2, 1], 5)
不积跬步无以至千里 不积小流无以成江海