js-day07数组方法&排序

简介: js-day07数组方法&排序

js-day07数组方法&排序


01回顾

知识回顾:

- 程序语句

应用程序 = 程序语句 + 数据结构 + 算法

- 数组基础

- 数组是做什么的?

- 数组创建方式

- 访问数组元素

+ 索引号

- 数组length属性

- 数组遍历

- 数组数据类型Array

- 数组常用方法

- push

- unshift

- pop

- shift

- splice

- sort

- reverse

        - join
        - indexOf
        - includes
        ...
     - 数组内存结构
        内存区域划分
          + 栈区域
              基本数据类型变量
              引用变量
          + 堆区域
              复杂数据类型也叫对象类型

02数组常用方法

1、join

=>作用: 将数组元素按指定字符拼接成字符串返回

=>参数: 指定字符

=>返回值: 返回拼接之后的字符串 | 原数组并没有改变

    2、indexOf
      =>作用: 返回数组元素索引号
      =>参数: 数组元素
      => 返回值: 索引号
                若参数写的元素不存在,则返回-1
                 拓展: 判断元素是否在数组中
                  arr.indexOf(50) == -1
    3、includes
      =>作用:检索元素是否在数组中 
      =>参数:数组的元素
      =>返回值:true | false

03数组遍历常用方法

0、for循环

1、forEach

作用:循环遍历

语法:

arr.forEach(function(item,index,arr){
//item 数组元素 此项必须有,其余可省略
//index 元素索引号
//arr 原数组
})

2、map

作用:遍历 & 返回到新数组中

语法:同上

var newArr = arr.map(function(item,index,arr){
return item + 1
})
返回值:新的数组

3、filter

作用:找数组中满足条件的元素,返回到新数组中

语法:

var newArr = arr.filter(function(item,index,arr){
return item > 1
})
返回值:新的满足条件数组

4、find

作用:找数组中满足条件的第一个元素

语法:

var newArr = arr.find(function(item,index,arr){
return item > 1
})
返回值:元素数据

5、every

作用:判断数组中所有元素是否全都满足条件,如果全部满足返回true,否则false

语法:

var newArr = arr.every(function(item,index,arr){
return item > 1
})
返回值:true | false

6、some

作用: 数组中只要有元素满足指定的条件,只要有一个满足返回true

语法:

var newArr = arr.some(function(item,index,arr){
return item > 1
})
返回值:true | false

7、reduce

作用: 累加求和 & 遍历

语法:

var newArr = arr.reduce(function(s,item,index){
return s + item //返回的是s的新的值 累加完毕后赋值给newArr
},0)
返回值:累加的和
参数:两个
第一个:匿名函数(累加,变量)
第二个0:累加和变量S的初始值

04交换数组中两个数的位置

     * 交换数组元素
     * arr 数组
     * i 索引号
     * k 索引号
     //总结的交换数组元素的公式
    function swap(arr,i,k){ //arr数组 i&k 索引号
        var temp = arr[i];
        arr[i] = arr[k]
        arr[k] = temp;
    }
    function text3(){
        var arr = [12,23,34,566]
        swap(arr,1,3)   //直接使用
        console.log(arr);
    }
    text3()

05排序 (算法)面试题+笔试题

    排序: 将一组无序的数据按从小到大或从大到小顺序排列
     [98,86,78,66,82]
     由小到大排序后
     [66,78,82,86,98]
    1、冒泡排序,实现排序的一种算法
        思想: n个数进行冒泡排序, 需要n-1次冒泡,
             每次冒泡操作:相邻两个数,两两比较,前一个数比后一个大,交换位置,一轮比较最大数沉底
            0  第一次冒泡: 比较次数 n-1 -0
            1  第二次冒泡: 比较次数 n-1 -1
            i  第二次冒泡: 比较次数 n-1 -i
         请对下列n个数进行冒泡排序?
          //外层循环, n个数进行冒泡排序, 需要n-1次冒泡
          for(var i = 0; i < n-1; i++){
              //内层循环,相邻两个数,两两比较,前一个数比后一个大,交换位置
              for(var j = 0; j < n - 1 -i; j++){
                  if(arr[j] > arr[j+1]){
                      var temp = arr[j]
                      arr[j] = arr[j+1]
                      arr[j+1] = temp
                  }
              }
          }
    //由小到大排序
    function maoSort(){
        var arr = [98,86,79,68,90,82]
        var n = arr.length;
        //外层循环, n个数进行冒泡排序, 需要n-1次冒泡
        for(var i = 0 ;i < n-1;i++){
            //内层循环,相邻两个数,两两比较,前一个数比后一个大,交换位置
            for(var j = 0; j < n - 1 - i;j++){
                if(arr[j] > arr[j+1]){
                    var temp = arr[j];
                    arr[j] = arr[j+1]
                    arr[j+1] = temp;
                }
            }
        }
        console.log('由小到大排序',arr);
    }
    maoSort()
     //由大到小排序
     function maoSort1(){
        var arr = [98,86,79,68,90,82]
        var n = arr.length;
        //外层循环, n个数进行冒泡排序, 需要n-1次冒泡
        for(var i = 0 ;i < n-1;i++){
            //内层循环,相邻两个数,两两比较,前一个数比后一个小,交换位置
            for(var j = 0; j < n - 1 - i;j++){
                if(arr[j] < arr[j+1]){
                    var temp = arr[j];
                    arr[j] = arr[j+1]
                    arr[j+1] = temp;
                }
            }
        }
        console.log('由大到小排序',arr);
    }
    maoSort1()
    2、选择排序
    思想:
     首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置(交换位置)
     再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
     重复第二步,直到所有元素均排序完毕。
    //由大到小
    function selectSort() {
        var arr = [86, 79, 98, 68, 90, 82]
        var n = arr.length
        //外层循环,n个数进行n-1次选择排序
        for (var j = 0; j < n - 1; j++) {
            //内层循环
            //核心思想: 在未排序的数中找最大数索引号,与未排序的第一个交换位置
            var maxIndex = j //最大数索引号 j:0
            for (var i = j + 1; i < n; i++) { //不用和自己比较 i= j+1
                if (arr[i] > arr[maxIndex]) {
                    maxIndex = i //maxIndex: 2
                }
            }
            //交换位置
            var temp = arr[j]
            arr[j] = arr[maxIndex]
            arr[maxIndex] = temp
        }
        console.log('由大到小 ',arr);
    }
    selectSort()
    // 由小到大 
    function selectSort1() {
        //外层循环 n个数进行n-1次循环
        var arr = [86, 79, 98, 68, 90, 82]
        var n = arr.length
        for (var j = 0; j < n - 1; j++) {
            //内层循环 从未排序的数中找最小数,找到索引号,与未排序的数中的第一个进行交换位置
            var minIndex = j; //记录最小值的索引号
            //依次让后面的数与最小值进行比较,如果比最小值小,把值赋给min
            for (var i = j + 1; i < n; i++) {
                if (arr[i] < arr[minIndex]) {
                    minIndex = i; // 79<86 最小索引号 = 1
                }
            }
            //交换位置
            var temp = arr[j];
            arr[j] = arr[minIndex]
            arr[minIndex] = temp
        }
        console.log("由小到大排序是",arr);
    }
    selectSort1(
相关文章
|
25天前
|
前端开发 JavaScript 算法
使用 JavaScript 数组方法实现排序与去重
【10月更文挑战第21天】通过灵活运用 `sort()` 方法和 `filter()` 方法,我们可以方便地实现数组的排序和去重。同时,深入理解排序和去重的原理,以及根据实际需求进行适当的优化,能够更好地应对不同的情况。可以通过实际的项目实践来进一步掌握这些技巧,并探索更多的应用可能性。
97 59
|
25天前
|
JavaScript 前端开发
JavaScript 数组方法汇总
【10月更文挑战第21天】这些是 JavaScript 数组中一些常见的方法,它们为我们处理数组提供了强大的工具,使我们能够更加方便快捷地操作数组。你可以根据具体的需求选择合适的方法来实现相应的功能。同时,还可以通过组合使用这些方法来实现更复杂的数组操作。还可以进一步深入研究和探索其他数组方法,以发掘更多的应用场景和潜力。
88 59
|
9天前
|
缓存 JavaScript 前端开发
介绍一下 JavaScript 中数组方法的常见优化技巧
通过合理运用这些优化技巧,可以提高 JavaScript 中数组方法的执行效率,提升代码的整体性能。在实际开发中,需要根据具体的业务场景和数据特点选择合适的优化方法。
20 6
|
6月前
|
JavaScript 前端开发
JavaScript 数组方法概览
【5月更文挑战第11天】JavaScript 数组方法概览:push() 添加元素至末尾;pop() 删除并返回最后一个元素;shift() 删除并返回第一个元素;unshift() 向开头添加元素;slice() 返回指定范围的浅拷贝;splice() 删除/替换/添加元素,改变原数组;concat() 合并数组;join() 转换为字符串;reverse() 颠倒顺序;sort() 排序;map() 应用函数并创建新数组;filter() 过滤元素;reduce() 累加元素为单一值。
35 1
|
2月前
|
存储 缓存 JavaScript
JavaScript 中数组方法的常见优化技巧
JavaScript 中数组方法的常见优化技巧
|
1月前
|
前端开发 JavaScript 索引
JavaScript 数组常用高阶函数总结,包括插入,删除,更新,反转,排序等,如map、splice等
JavaScript数组的常用高阶函数,包括遍历、插入、删除、更新、反转和排序等操作,如map、splice、push、pop、reverse等。
18 0
|
2月前
|
JavaScript 前端开发
用Javascript对二维数组DIY按汉语拼音的排序方法
用Javascript对二维数组DIY按汉语拼音的排序方法
|
3月前
|
JavaScript
js实现模糊搜索和排序
js实现模糊搜索和排序
19 0
|
5月前
|
JavaScript
JS数组排序看懂这篇就够了
JS数组排序看懂这篇就够了
42 1
|
5月前
|
JavaScript 前端开发 数据管理
使用Sortable.js库 实现Vue3 elementPlus 的 el-table 拖拽排序
使用Sortable.js库 实现Vue3 elementPlus 的 el-table 拖拽排序
1579 1