JavaScript —— JSchallenger Arrays 数组练习(测试一下你的 JS 数组基础)【专题二】

简介: JavaScript —— JSchallenger Arrays 数组练习(测试一下你的 JS 数组基础)【专题二】

二、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

代码实现:

  1. 使用 filter() 过滤出来数组 a 中大于数值 b 的值,再对得到的值通过 reduce() 求和。
  2. 使用 reduce() 求出通过 if 判断语句筛选出来的值。
  array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
  1. total:必需。初始值, 或者计算结束后的返回值。
  2. currentValue:必需。当前元素。
  3. currentIndex:可选。当前元素的索引。
  4. arr:可选。当前元素所属的数组对象。
  5. 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']

代码实现:

  1. 条件语句,合并结果为数组,再使用 flat() 打平数组。
  2. 三目运算符,配合 ... 操作符合并数组。
  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)

不积跬步无以至千里 不积小流无以成江海

相关文章
|
11天前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
|
1月前
|
自然语言处理 前端开发 JavaScript
🛠️ JavaScript数组操作指南:20个精通必备技巧🚀
本文详细介绍了 JavaScript 中的 20 个高效数组操作技巧,涵盖了从基本的添加、移除元素,到数组转换和去重等高级操作。强调了不可变性的重要性,提供了清晰的代码示例,帮助开发者编写更整洁和高效的代码。无论是新手还是经验丰富的开发者,这些技巧都将显著提升您的编码能力,使您在项目中更具竞争力。
23 2
|
1月前
|
JavaScript 前端开发 测试技术
JS都有哪些操作数组的方法
JS都有哪些操作数组的方法
20 3
|
1月前
|
缓存 JavaScript 前端开发
JavaScript中数组、对象等循环遍历的常用方法介绍(二)
JavaScript中数组、对象等循环遍历的常用方法介绍(二)
31 1
|
30天前
|
Web App开发 JavaScript 前端开发
Node.js:JavaScript世界的全能工具
Node.js:JavaScript世界的全能工具
|
1月前
|
JSON JavaScript 前端开发
使用JavaScript和Node.js构建简单的RESTful API服务器
【10月更文挑战第12天】使用JavaScript和Node.js构建简单的RESTful API服务器
17 0
|
1月前
|
JavaScript 前端开发 API
JS中数组的方法flat()怎么用
JS中数组的方法flat()怎么用
13 0
|
7天前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
36 3
|
1月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
58 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
2月前
|
移动开发 JSON Java
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
238 7
Jmeter实现WebSocket协议的接口测试方法