1. typora-copy-images-to: media

数组

一、概念

对象中可以通过键值对存储多个数据,且数据的类型是没有限制的,所以通常会存储一个商品的信息或一个人的信息:

  1. var obj = {
  2. goodsname:"手机",
  3. price:"5000",
  4. introduce:"手机很时尚,很漂亮!"
  5. }
  6. var person = {
  7. name:"张三",
  8. age:12,
  9. sex:"男"
  10. }

但对象在存储同类型数据的时候比较困难,例如,存储一个班级所以人的姓名:

  1. var obj = {
  2. name1:"张三",
  3. name2:"李四",
  4. name3:"王五",
  5. ...
  6. }

这种存储方式我们没有办法通过一个人的姓名获取到这个人的编号,也没有办法通过一个编号获取到某个人的姓名。

js提供了另外一种对象类型的数据,可以通过编号来存储数据:数组。也是对象3种表现形式中的另外一种,[]定义的对象。

二、数组定义

  1. var arr = []

这是一个空数组,定义带数据的数组:

  1. var arr = ['张三','李四','王五','赵六']

输出结果:

数组中的数据类型没有限制,在实际项目中,数组中通常会存储同一类型的数据。

  1. var arr = ['a',2,false,undefined,{name:"张三"}];

数组这种数据,相当于在一个大空间中,有很多小空间,每个值前面的数字,表示这个小空间的编号,专业术语叫下标。第一个下标永远是0,依次向后递增,最后一个下标是值的个数-1

也就是说,数组这种数据中每个值是有顺序的。

js还提供了一个构造函数,用来创建数组:

  1. var arr = new Array("张三","李四","王五")

这两种方式定义的数据是一样的。

有一种情况,这两种定义方式是不一样的:

  1. var arr = [5]
  2. var brr = new Array(5)
  3. console.log(arr,brr)

[]形式定义的是一个数组中有一个小空间,其中的值是5;构造函数方式定义的,表示有5个空的小空间。

数组的规律:

第一个值的下标永远是0;

最后一个值的下标永远是值的个数-1。

三、数组基本操作

数组中值的个数:数组.length

  1. var arr = ['张三',"李四","王五","赵六"];
  2. var arr1 = [1,2,3,4,5,6];
  3. console.log(arr.length); // 4
  4. console.log(arr1.length); // 6

访问数组中的元素:数组[下标]

例:

  1. var arr = ["张三","李四","王五"];
  2. console.log(arr[1]); // 李四

第一个值永远是:数组[0];最后一个值永远是:数组[数组.length-1]

添加元素:数组[下标] = 值

例:

  1. var arr = ["张三","李四"];
  2. arr[2] = "王五";
  3. console.log(arr); // (3) ["张三", "李四", "王五"]
  4. arr[10] = "赵六";
  5. console.log(arr); // (11) ["张三", "李四", "王五", empty × 7, "赵六"] 中间还有7个空元素

修改元素:数组[下标] = 值

例:

  1. var arr = ["张三","李四"];
  2. arr[0] = "王五";
  3. console.log(arr); // (2) ["王五", "李四"]

使用说明:如果下标是已经存在的,那赋值操作就是修改数组元素的值,如果下标是不存在,那赋值操作就给数组添加元素。

删除元素:delete 数组[下标]

  1. var arr = [1,2,3];
  2. delete arr[0];
  3. console.log(arr)

这种删除方式,只能删除值,并不能删除小空间。

数组长度的赋值:

  1. var arr = [1,2,3];
  2. arr.length = 0;
  3. console.log(arr) // []
  4. var arr = [1,2,3];
  5. arr.length = 10;
  6. console.log(arr)

  1. var arr = [1,2,3];
  2. arr.length = 1;
  3. console.log(arr) // [1]

遍历数组:

如果要将数组中的所有元素都输出,操作如下:

  1. var arr = ["张三","李四","王五","赵六"];
  2. console.log(arr[0]); // 张三
  3. console.log(arr[1]); // 李四
  4. console.log(arr[2]); // 王五
  5. console.log(arr[3]); // 赵六

从上面输出的代码中可以看出,多次输出是在进行重复动作,并且多次重复之间是有规律可循的,所以可以使用循环进行这个重复动作:

  1. var arr = ["张三","李四","王五","赵六"];
  2. var length = arr.length;
  3. for(var i=0;i<length;i++){
  4. console.log(arr[i]);
  5. }

结果:

循环输出数组中的每个值

这种使用循环将数组中每个元素输出的操作叫做数组的遍历 - 每个元素都经历一次

遍历对象的for in语法也可以遍历数组:

  1. var arr = ["张三","李四","王五","赵六"];
  2. for(var i in arr){
  3. console.log(arr[i]);
  4. }

两种遍历方式有区别:

  1. var arr = ['a','b','c'];
  2. arr[5] = 'd'
  3. console.log(arr);
  4. for(var i=0;i<arr.length;i++){
  5. console.log(arr[i]);
  6. }

空的空间会遍历出undefined

  1. var arr = ['a','b','c'];
  2. arr[5] = 'd'
  3. console.log(arr);
  4. for(var i in arr){
  5. console.log(arr[i]);
  6. }

空的空间不会被遍历。

  1. var arr = ['a','b','c'];
  2. for(var i=0;i<arr.length;i++){
  3. console.log(i);
  4. }

下标是数字。

  1. var arr = ['a','b','c'];
  2. for(var i in arr){
  3. console.log(i);
  4. }

下标是字符串。所以for in的语法更适合遍历对象,为了避免不必要的错误,尽量不要用这种语法来遍历数组。

四、数组练习

  1. 利用for循环求数字数组中所有元素的和

    1. var arr = [10,20,30,40,50];
    2. var sum = 0;
    3. for(var i = 0;i < arr.length; i++){
    4. sum += arr[i];
    5. }
    6. console.log(sum);
  2. 有一个数组,具体内容如下:

    1. var arr = [
    2. "越南被曝咖啡造假:咖啡粉里掺加电池芯",
    3. "抗日神剧被当教材:机密文件居然有女优名字",
    4. "王俊凯任联合国大使:系最年轻的联合国大使",
    5. "行人闯红灯遭水喷 目前还在测试阶段",
    6. "68条鱼估价超600万 什么鱼要这么贵?"
    7. ]

    利用循环使用js做出如下图效果:

    1. var arr = [
    2. "越南被曝咖啡造假:咖啡粉里掺加电池芯",
    3. "抗日神剧被当教材:机密文件居然有女优名字",
    4. "王俊凯任联合国大使:系最年轻的联合国大使",
    5. "行人闯红灯遭水喷 目前还在测试阶段",
    6. "68条鱼估价超600万 什么鱼要这么贵?"
    7. ];
    8. document.write("<ul>");
    9. for(var i=0;i<arr.length;i++){
    10. document.write("<li>"+arr[i]+"</li>");
    11. }
    12. document.write("</ul>")
  3. 求数组中的最大值

    1. var arr = [1,9,3,6,8,5,4,7,2,12];
    2. // 求出最大值
    3. var length = arr.length;
    4. var max = arr[0];
    5. for(var i=1;i<length;i++){
    6. if(max<arr[i]){
    7. max = arr[i];
    8. }
    9. }
    10. console.log(max);
  4. 把1~100这个100个数字存到数组中

    1. var arr = [];
    2. for(var i=1;i<=100;i++){
    3. arr[arr.length] = i
    4. }
  5. 整理数组数据,模拟京东的商品列表

    1. <script>
    2. var arr = [
    3. {
    4. goodsImg:'https://img30.360buyimg.com/seckillcms/s140x140_jfs/t1/186995/37/12433/183771/60e7ffb3E1b78db87/c5696abfd650ef64.jpg.webp',
    5. goodsname:'荣耀畅玩20 手机 老人机 学生智能机 【咨询加赠华为原装Type-C线】 幻夜黑 全网通(6G+128G)',
    6. goodsoldprice:'1399',
    7. goodsnowproce:'1029'
    8. },
    9. {
    10. goodsImg:'https://img20.360buyimg.com/seckillcms/s140x140_jfs/t1/116335/26/233/214256/5e8998c4E3b5fc871/ec122a9622175d7e.jpg.webp',
    11. goodsname:'【纯银999十二生肖七彩建盏】【配银饰鉴定证+礼盒+礼盒袋+收藏证书】天目釉原矿铁胎茶盏主人杯茶具茶 纯手工七彩盏-莲花纯银999',
    12. goodsoldprice:'659',
    13. goodsnowproce:'199'
    14. },
    15. {
    16. goodsImg:'https://img12.360buyimg.com/seckillcms/s140x140_jfs/t1/182318/5/13135/123400/60e55430E14b60a71/070af11351a8de90.jpg.webp',
    17. goodsname:'风味坐标 手撕牛肉干 400g(经典原味) 内蒙古锡林浩特特产 高蛋白休闲零食',
    18. goodsoldprice:'229',
    19. goodsnowproce:'69'
    20. },
    21. {
    22. goodsImg:'https://img11.360buyimg.com/seckillcms/s140x140_jfs/t1/185818/10/12878/72765/60e41060Ed9ebc1a3/5fa7730180a53328.jpg.webp',
    23. goodsname:'蔬果园蓝风铃香水洗衣液除菌液母婴可用持久留香酵素英式香氛香味洗衣液洁净家庭组合套装 蓝风铃2kg*3+500g*5袋+留香珠18g*2',
    24. goodsoldprice:'159',
    25. goodsnowproce:'119'
    26. },
    27. ];
    28. // 遍历数组,输出标签
    29. for(var i=0;i<arr.length;i++){
    30. document.write('<li>');
    31. document.write('<img src="' + arr[i].goodsImg + '">');
    32. document.write('<h4>'+arr[i].goodsname+'</h4>');
    33. document.write('<b>'+arr[i].goodsnowproce+'</b>');
    34. document.write('<span>'+arr[i].goodsoldprice+'</span>');
    35. document.write('</li>');
    36. }
    37. </script>
    38. <style>
    39. li{
    40. list-style-type: none;
    41. padding: 0;
    42. margin: 0;
    43. width: 140px;
    44. height: 190px;
    45. border:1px solid #000;
    46. float:left;
    47. margin:0 10px;
    48. }
    49. li h4{
    50. width: 140px;
    51. white-space: nowrap;
    52. overflow: hidden;
    53. text-overflow: ellipsis;
    54. padding: 0;
    55. margin: 0;
    56. }
    57. </style>

五、基础类型和引用类型

js中允许出现的数据:number、string、boolean、null、undefined、{}、[]、function

根据不同类型的数据存储方式以及赋值方式的不同,我们将数据分为两类:基本类型和引用类型。

基础数据类型:number、string、boolean、undefined、null

引用数据类型:[]、function, {}

基础类型和引用类型的区别:

  1. 存储方式不同

    基础类型将值存在栈内存中;引用类型将值存在堆内存中,将堆内存的内存地址存在栈中。

    1. var a = 1;
    2. var obj = {name:"张三",age:12}

  2. 赋值过程不同

    基础类型赋值时,将值复制给另一个变量;引用类型赋值时,将栈中的地址复制给别的变量。

    1. var a = 1
    2. var b = a;
    3. a = 2;
    4. console.log(b) // 2

    复制值以后,修改其中一个,另一个不会受到影响。

    1. var arr = ['a','b','c'];
    2. var brr = arr;
    3. arr[0] = 'd'
    4. console.log(brr) // ['d','b','c'];

    当改变其中一个变量中的值,另一个变量中的值也会发生改变。

  3. 全等的比较规则不同

    基础类型全等比较的时候,比较类型和值;

    1. var a = 1;
    2. var b = 1;
    3. console.log(a === b)

    引用类型全等比较的时候比较栈中存的内存地址是否相同。

    1. var arr = [1,2,3];
    2. var brr = [1,2,3]
    3. console.log(arr === brr)

注意:直接给变量赋值,一定会将变量栈空间中内容清空,然后重新放入新数据。

六、数组方法

如何给数组的开头添加一个元素?

  1. var arr = ['a','b','c']
  2. for(var i=arr.length-1;i>=0;i++){
  3. arr[i+1] = arr[i]
  4. }
  5. arr[0] = 'd'
  6. console.log(arr)

这样操作起来比较复杂。为了方便我们对数组进行操作,js提供了一些方法,可以快速的操作数组:

  • unshift - 给数组开头添加一个或多个元素 - 返回数组新长度

    1. var arr = ['a','b','c'];
    2. var l = arr.unshift('d')
    3. console.log(arr) // ['d','a','b','c']
    4. console.log(l) // 4
  • push - 给数组的末尾添加一个或多个元素 - 返回数组新长度

    1. var arr = ['a','b','c'];
    2. var l = arr.push('d')
    3. console.log(arr) // ['a','b','c','d']
    4. console.log(l) // 4
  • shift - 删除数组的第一个元素 - 返回被删掉的元素

    1. var arr = ['a','b','c'];
    2. var ele = arr.shift()
    3. console.log(arr) // ['b','c']
    4. console.log(ele) // 'a'
  • pop - 删除数组最后一个元素 - 返回被删掉的元素

    1. var arr = ['a','b','c'];
    2. var ele = arr.pop()
    3. console.log(arr) // ['a','b']
    4. console.log(ele) // 'c'
  • splice - 对数组做增、删、改的操作

    1. var arr = ['a','b','c']
    2. // 改 - 参数1:开始下标;参数2:删除的个数;参数3:在删除的位置放上的新的元素 - 可以是多个
    3. arr.splice(1,1,'d') // ['a','d','c']
    4. // 增
    5. arr.splice(1,0,'d') // ['a','d','b','c'] - 删除0个,就是不删除,然后放上新元素
    6. // 删 - 第三个参数可以省略
    7. arr.splice(1,0) // ['a','c']
  • concat - 数组的拼接

    1. var arr = ['a','b','c'];
    2. var brr = ['d','e','f'];
    3. // 将arr和brr合成一个更大的数组
    4. var crr = arr.concat(brr) // ['a','b','c','d','e','f']
    5. // 将一个或多个值和数组合并成一个大数组
    6. var crr = arr.concat(1,2,3)// ['a','b','c',1,2,3]
  • sort - 数组的排序

    1. var arr = [9,5,3,7,1,6,4,8,2];
    2. arr.sort() // 默认升序
    3. console.log(arr) // [1,2,3,4,5,6,7,8,9]
    4. arr.sort(function(a,b){ // a代表前面的数,b代表后面的数
    5. return a-b; // 升序 - 如果前面的数-后面的数>0,则交换位置
    6. return b-a; // 降序 - 如果后面的数-前面的数>0,则交换位置
    7. })
  • reverse - 数组的反转

    1. var arr = ['a','b','c'];
    2. arr.reverse()
    3. console.log(arr) // ['c','b','a']
  • join - 将数组中的元素使用指定的连接符连接在一起

    1. var arr = ['a','b','c'];
    2. var str = arr.join('_') // 参数是连接符
    3. console.log(str) // a_b_c
    4. var str = arr.join() // 默认使用逗号连接
    5. console.log(str) // a,b,c
    6. var str = arr.join('')
    7. console.log(str) // abc
  • slice - 截取数组

    1. var arr = ['a','b','c','d','e','f'];
    2. // 将数组中的 'b','c','d'截取出来,组成新的数组
    3. var brr = arr.slice(1,4) // 参数1是开始截取的下标,参数2是截取的结束下标,结果中不包含结束下标对应的元素
    4. console.log(brr) // ['b','c','d']
    5. // 如果省略第2个参数,默认从开始下标截取到数组末尾
    6. var crr = arr.slice(1)
    7. console.log(crr) // ['b','c','d','e','f']
  • indexOf方法

    查找某个元素在数组中第一次出现的位置

    语法:

    1. arr.indexOf(元素,[开始查找的起始下标]);
    2. # 参数1:将要查找的元素
    3. # 参数2:可选项。从哪个下标开始往后查找
    4. # 返回值:如果找到了,就返回这个元素在数组中的下标,如果没有找到,就返回-1

    例:

    1. var arr = [1,3,5,7,7,5,3,1];
    2. console.log(arr.indexOf(5)); // 2 - 查找数字5在数组中第一次出现的下标
    3. console.log(arr.lastIndexOf(5)); // 5 - 查找数字5在数组中最后一次出现的位置
    4. console.log(arr.indexOf(5,3)); // 5 - 从下标2开始查找数字5在数组中第一次出现的位置
    5. console.log(arr.lastIndexOf(5,4)); // 2 - 从下标4开始查找数字5在数组中最后一次出现的下标
    6. console.log(arr.indexOf("5")); // -1 - 数组中全是数字,找不到字符串5,所以返回-1
  • forEach方法

    用于遍历数组

    语法:

    1. arr.forEach(function(值, 下标, 当前数组){
    2. // 代码段
    3. });
    4. # 在这个方法中需要传入一个函数参数,这个函数的参数说明如下:
    5. # 参数1:数组遍历出来的每个值
    6. # 参数2:可选项。数组遍历出来的每个值对应的下标
    7. # 参数3:可选项。被遍历的当前数组

    例:

    1. var arr = [1, 2, 3, 4, 5];
    2. arr.forEach(function(x, index, a){
    3. console.log(x + '|' + index + '|' + (a === arr));
    4. });
    5. // 输出为:
    6. // 1|0|true
    7. // 2|1|true
    8. // 3|2|true
    9. // 4|3|true
    10. // 5|4|true

    使用说明:

    这个方法没有返回值,返回值为undefined,不会改变原来数组的值。

  • map方法

    遍历数组,并将每个元素经过函数处理后,形成新的元素,所有新元素组成新数组返回

    语法:

    1. arr.map(function(值,下标,当前数组){
    2. return 新的值 - 通常新的值是由旧的值处理以后得到
    3. });

    例:

    1. var arr = [1, 2, 3, 4, 5];
    2. var arr2 = arr.map(function(item){
    3. return item*item;
    4. });
    5. console.log(arr2); //[1, 4, 9, 16, 25]

    使用说明:

    这个方法主要用于以同样的规则处理数组中的每个值,并组成新的数组返回

  • filter方法

    将数组中满足指定条件的值,组成新的数组返回

    语法:

    1. arr.filter(function(值, 下标, 当前数组){
    2. return 筛选条件
    3. });

    例:

    1. var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    2. var arr2 = arr.filter(function(v, index) {
    3. return v>5
    4. });
    5. console.log(arr2); //[6, 7, 8, 9, 10]

    使用说明:

    使用方法和功能跟map方法很像,只是运行规则不一样。map方法中的函数,用于返回新的元素,而filter方法中的函数,根据返回true或false来筛选元素

  • reduce方法

    用于数组求和

    语法:

    1. arr.reduce(function(a, b){
    2. return a + b
    3. });

    其中a第一次的时候,表示第一个元素,第二次开始表示上一次返回的数据,b第一次表示第二个元素,第二个开始表示第三个元素、第四个元素。。。

  • some - 判断数组中是否至少有一个元素是满足指定条件的,返回布尔值

    语法:

    1. 布尔值 = 数组.some(function(v,i,a){
    2. return 条件;
    3. })
    4. // 上面的i和a是可选参数

    例:判断所有成绩中是否有不及格的成绩

    1. var arr = [68,95,78,56,86,63];
    2. var bool = arr.some(function(v,i,a){
    3. return v<60;
    4. });
    5. console.log(bool); // true

    some内置的原理,遍历数组,判断每个值是否满足条件,有满足的就返回true,并break循环,遍历完以后都没有一个是满足的,返回false

    1. var arr = [68,95,78,56,86,63];
    2. var k = 0
    3. var bool = arr.some(function(v,i,a){
    4. k++
    5. return v<60;
    6. });
    7. console.log(bool); // true
    8. console.log(k); // 4
    9. var arr = [68,95,78,66,86,63];
    10. var k = 0
    11. var bool = arr.some(function(v,i,a){
    12. k++
    13. return v<60;
    14. });
    15. console.log(bool); // false
    16. console.log(k); // 6
  • every - 判断数组中是否所有元素都满足指定的条件,返回布尔值

    语法:

    1. 布尔值 = 数组.every(function(){
    2. return 条件
    3. })
    4. // 上面的i和a是可选参数

    例:判断是否所有成绩都及格了

    1. var arr = [68,95,78,56,86,63];
    2. var bool = arr.some(function(v,i,a){
    3. return v>60;
    4. });
    5. console.log(bool); // false

    every内置的原理,遍历数组,判断每个值是否满足条件,有不满足的就返回false,并break循环,遍历完以后都满足,返回true

    1. var arr = [68,95,78,56,86,63];
    2. var k = 0
    3. var bool = arr.every(function(v,i,a){
    4. k++
    5. return v>60;
    6. });
    7. console.log(bool); // false
    8. console.log(k); // 4
    9. var arr = [68,95,78,66,86,63];
    10. var k = 0
    11. var bool = arr.every(function(v,i,a){
    12. k++
    13. return v>60;
    14. });
    15. console.log(bool); // true
    16. console.log(k); // 6
  • find - 查找数组中第一个满足指定条件的值,找到返回值,找不到返回undefined

    语法:

    1. = 数组.find(function(v,i,a){
    2. return 条件
    3. })
    4. // 上面的i和a是可选参数

    例:找出所有成绩中第一个不及格的成绩

    1. var arr = [68,95,78,56,86,63];
    2. var ele = arr.find(function(v,i,a){
    3. return v<60
    4. })
    5. console.log(ele); // 56

    find的原理,遍历数组,判断每个元素是否满足条件,满足就返回这个元素,并break循环,如果遍历完了都没有满足条件的,就返回undefined

    1. var arr = [68,95,78,56,55,86,63];
    2. var k = 0
    3. var ele = arr.find(function(v,i,a){
    4. k++
    5. return v<60;
    6. });
    7. console.log(ele); // 56
    8. console.log(k); // 4
    9. var arr = [68,95,78,66,86,63];
    10. var k = 0
    11. var ele = arr.find(function(v,i,a){
    12. k++
    13. return v<60;
    14. });
    15. console.log(ele); // undefined
    16. console.log(k); // 6
  • findIndex - 查找数组中满足条件的第一个对应的下标,找到返回下标,找不到返回-1

    语法:

    1. 下标 = 数组.findIndex(function(v,i,a){
    2. return 条件
    3. })
    4. // 上面的i和a是可选参数

    例:找出所有成绩中第一个不及格的成绩的下标

    1. var arr = [68,95,78,56,86,63];
    2. var index = arr.find(function(v,i,a){
    3. return v<60
    4. })
    5. console.log(index); // 3

    findIndex的原理,遍历数组,判断每个元素是否满足条件,满足就返回这个元素的下标,并break循环,如果遍历完了都没有满足条件的,就返回-1

    1. var arr = [68,95,78,56,55,86,63];
    2. var k = 0
    3. var index = arr.find(function(v,i,a){
    4. k++
    5. return v<60;
    6. });
    7. console.log(index); // 3
    8. console.log(k); // 4
    9. var arr = [68,95,78,66,86,63];
    10. var k = 0
    11. var index = arr.find(function(v,i,a){
    12. k++
    13. return v<60;
    14. });
    15. console.log(index); // -1
    16. console.log(k); // 6

七、冒泡排序

相邻两个元素进行比较,将一个数组中的数字使用循环进行升序或降序的排列

  1. var arr = [3,2,1]; // ---> [1,2,3]
  2. // 相邻的元素比较,就是下标i的元素跟下标i+1的元素比较 - 所以循环要比正常的遍历少一次
  3. for(var i=0;i<arr.length-1;i++){
  4. // 如果前面的元素比后面的元素大
  5. if(arr[i]>arr[i+1]){
  6. // 则交换位置
  7. var tmp = arr[i]
  8. arr[i] = arr[i+1]
  9. arr[i+1] = tmp
  10. }
  11. }
  12. // 这个循环结束后,arr变为:[2,1,3]
  13. // 所以需要继续排列
  14. for(var i=0;i<arr.length-1;i++){
  15. // 如果前面的元素比后面的元素大
  16. if(arr[i]>arr[i+1]){
  17. // 则交换位置
  18. var tmp = arr[i]
  19. arr[i] = arr[i+1]
  20. arr[i+1] = tmp
  21. }
  22. }
  23. // 这个循环结束后,arr变为:[1,2,3]
  24. // 两个循环代码是重复的,所以用循环处理。3个元素循环两次,4个元素循环3次,所以循环重复的次数也是数组长度-1
  25. for(var j=0;j<arr.length-1;j++){
  26. for(var i=0;i<arr.length;i++){
  27. if(arr[i]>arr[i+1]){
  28. var tmp = arr[i]
  29. arr[i] = arr[i+1]
  30. arr[i+1] = tmp
  31. }
  32. }
  33. }
  34. // 如果要降序排序,就将判断条件中的>改为<即可

八、选择排序

降序:先找最大值,排在最左边,再找第二大的值,往左边靠...,已经排好的,不再参与比较

  1. var arr = [3,2,1]; // ---》 [1,2,3]
  2. // arr[0]放最小的值,所以将arr[0]跟后面所有值比较,如果有比arr[0]更小的,就跟arr[0]交换位置
  3. for(var i=1;i<arr.length;i++){
  4. if(arr[0]>arr[i]){
  5. var tmp = arr[0]
  6. arr[0] = arr[i]
  7. arr[i] = tmp
  8. }
  9. }
  10. // 此时的数组:[1,3,2]
  11. // 第1个位置的数字排好了,排第2个位置上的数字
  12. // arr[1]放剩下的数字中最小的,使用arr[1]跟后面的数字比较,如果有比arr[1]更小的,就跟arr[1]交换位置
  13. for(var i=2;i<arr.length;i++){
  14. if(arr[1]>arr[i]){
  15. var tmp = arr[1]
  16. arr[1] = arr[i]
  17. arr[i] = tmp
  18. }
  19. }
  20. // 此时的数组:[1,2,3]
  21. // 重复代码用循环处理,3个数排2次,4个数排3次
  22. for(var j=0;j<arr.length-1;j++){
  23. for(var i=j+1;i<arr.length;i++){
  24. if(arr[j]>arr[i]){
  25. var tmp = arr[j]
  26. arr[j] = arr[i]
  27. arr[i] = tmp
  28. }
  29. }
  30. }
  31. // 如果要进行降序排列,就将判断条件中的>换成<即可

自学day7 数组的更多相关文章

  1. Python自学day-7

    一.静态方法(@staticmethod) class Dog(object): def __init__(self): pass @staticmethod def talk(): #静态方法 pa ...

  2. C++_系列自学课程_第_7_课_数组_《C++ Primer 第四版》

    说到数组,大家应该都很熟悉,在C.Pascal.Java等语言中,都有数组的概念.在C++中也提供了对数组的支持.数组简单来说就是一堆相同 数据类型对象的集合. 这里要把握住两个要点: 相同的数据类型 ...

  3. Ruby自学笔记(四)— 数组,Hash,正则表达式简介

    今天学习的是数组和Hash,数组在很多编程语言中都能常常用到. 数组: 数组是存储数据的一种容器,在Ruby中,数组中存储的数据可以是任何类型的数据:这和JAVA不同,在JAVA中,数组是存储同一类型 ...

  4. PHP自学4——通过函数将数组数据输出到html的Table标签中(使用函数的例子)

    这一节其实说实话并没有什么干货,不过为了防止PO主的懒癌的复发,还是坚持放一点东西,即使是内容和长度都令人发指.这一节通过一个函数来实现将数组中的内容输出html的Table标签当中显示. 函数文件— ...

  5. 【自学php】第四天 - 使用数组

    php支持两种数组,数字索引数组和关联数组.关联数组有点类似Map,可以用字符串或其他数据类型做键对应相应的值保存在数组中. 1.初始化数组 数字索引数组的初始化可以使用如下代码: $products ...

  6. Shell自学二(参数传递和数组)

    8.传递参数    1.使用$n来传递参数($0表示文件名)    例子:    echo "执行的文件名:$0";    echo "第一个参数为:$1";  ...

  7. [Day7]循环、数组方法、排序查找

    1. ASCII(American Standard Code for Information Interchange) (1)数字0-9对应ASCII编码十进制为48-57, 字母a-z对应ASCI ...

  8. JavaSE回顾及巩固的自学之路(四)——————方法和数组,面向对象

    今天是2018.03.31,emmmmmm.好像距离上一次写Javase回顾总结已经好久好久过去,差一点就以为要停更了,哈哈哈.        其实呢,最近是真的好忙(额,这段时间觉得自己一直在学习) ...

  9. 从零自学Java-7.使用数组存储信息

    1.创建数组: 2.设置数组的大小: 3.为数组元素赋值: 4.修改数组中的信息: 5.创建多维数组: 6.数组排序. 程序SpaceRemover:显示输入字符串,并将其中所有的空格字符替换为句点字 ...

  10. 【loj6041】「雅礼集训 2017 Day7」事情的相似度 后缀自动机+STL-set+启发式合并+离线+扫描线+树状数组

    题目描述 给你一个长度为 $n$ 的01串,$m$ 次询问,每次询问给出 $l$ .$r$ ,求从 $[l,r]$ 中选出两个不同的前缀的最长公共后缀长度的最大值. $n,m\le 10^5$ 题解 ...

随机推荐

  1. Jmeter:"An error occurred: Can't connect to X11 window server using 'lacalhost:12.0' as the value of the display variable." 解决办法

    做各种不同项目的性能测试,都需要在项目本地压测服务器配置jmeter,需要时还要调出jmeter图形化界面来调试jmeter脚本. 标题中的问题遇过多次,这次做个记录. 1. 启动jmeter报错 在 ...

  2. Day11:KMP、字典树、AC自动机、后缀数组、manacher

    KMP算法 前言 KMP算法是一个著名的字符串匹配算法,效率很高,但是确实有点复杂. 简介 KMP 算法是 D.E.Knuth.J,H,Morris 和 V.R.Pratt 三位神人共同提出的,称之为 ...

  3. Web通用漏洞--文件包含

    Web通用漏洞--文件包含 文件包含原理 在项目开发过程中,开发人员通常会将重复使用的函数写入单个文件中,在使用该类函数时,直接调用文件即可,无需重新编写,这种调用文件的过程成为文件包含.在文件包含过 ...

  4. ChatGPT应用篇:如何快速生成精美PPT提高工作效率-附资料下载

    一.ChatGPT生成markdown源代码 问: 我想做一份ChatGPT变现方法的PPT,请生成丰富的教学展示内容,因为生成PPT是需要MarkDown格式的,请您输出Markdown格式的内容 ...

  5. Python 基础面试第四弹

    1. Python中常用的库有哪些,作用分别是什么 requests: requests 是一个用于发送 HTTP 请求的库,它提供了简单而优雅的 API,可以轻松地发送 GET.POST.PUT.D ...

  6. C与CPP常见编译工具链与构建系统简介

    笔者最近在研究CEF的CMake工程,心血来潮想要对各种编译工具链以及构建系统做一个简单的总结,于是就有了本文.本文不会讲解任何关于C/C++语言方面的内容,主要C/C++的编译出发,介绍各种编译工具 ...

  7. PostgreSQL-分区表介绍

    一.分区简介 表分区是解决一些因单表过大引用的性能问题的方式,比如某张表过大就会造成查询变慢,可能分区是一种解决方案.一般建议当单表大小超过内存就可以考虑表分区了. 表的分区就是将一个逻辑上的大表(主 ...

  8. 万字长文教你实现华为云IoT+OpenHarmony智能家居开发

    本文分享自华为云社区<华为云IoT+OpenHarmony的智能家居开发>,作者:袁睿. 一.选题说明 1. 选题为基于OpenHarmony的智能家居,应用场景为户用,受益人群为住户. ...

  9. 5.2 磁盘CRC32完整性检测

    CRC校验技术是用于检测数据传输或存储过程中是否出现了错误的一种方法,校验算法可以通过计算应用与数据的循环冗余校验(CRC)检验值来检测任何数据损坏.通过运用本校验技术我们可以实现对特定内存区域以及磁 ...

  10. 位图(bitmap)原理以及实现

    大家好,我是蓝胖子,我一直相信编程是一门实践性的技术,其中算法也不例外,初学者可能往往对它可望而不可及,觉得很难,学了又忘,忘其实是由于没有真正搞懂算法的应用场景,所以我准备出一个系列,囊括我们在日常 ...