JS中的数组

web.jpeg

数组

  • 数组:是按次序排列的一组值。每个值的位置都有编号(从0开始),整个数组用方括号表示;
  • 就是一个容器可以存储很多的值,任何类型的数据都可以存放
  • 本质上,数组属于一种特殊的对象,typeof运算符会返回数组的类型是object

1.数组的声明 和创建

  • 通过构造函数创建数组
  var arr = new Array();
    console.log(arr);
  • 通过字面量创建数组
 <script>

        var arr = [1,2,3,4,5];
        console.log(arr);
    </script>

2. 数组元素添加和删除

  • 直接添加
var arr = new Array();
  /向数组为0的位置 添加一个为10 的元素
    arr[0] = 10;

  • push()方法可向数组的末尾添加一个或多个元素,并返回新的长度。
 var arr = [1,3,5];
        arr.push(7);
        console.log(arr);
结果变成 :  [1,3,5,7];

//添加多个元素
 arr.push(8,9,10);

  • unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度
 var arr = [1,3,5] 
 arr.unshift(0) 
  结果变成 [0,1,3,5]

  • pop() 删除最后一个元素
var  arr = [1,3,5]   →  arr.pop()  →  结果   [1,3]  

  • shift() 删除第一个元素
var  arr = [1,3,5]   →  arr.shift()  →  结果   [3,5] 

3.数组的访问

  • 数组名[索引值]
  • 索引值是从0开始的
  • 如果读取不到索引值undefiend
 var array = ["IT001","CC","DD","哈哈"];
        console.log(array[1]);
//打印结果是:CC

4. 数组的长度

  • 数组的length属性,返回数组的成员数量。
  • 访问方法是: 数组名.length
  • 清空数组的一个有效的方法就是可以length设为0
 var arr1 = ['a', 'b'];
    console.log(arr1.length);
//打印结果是:2

5.数组遍历

  • for循环遍历
  var array = ["IT001","CC","DD","哈哈"];
        for (var i = 0; i < array.length; i++){

            console.log(array[I]);
        }
//打印结果:
IT001
CC
DD
哈哈


  • for…in 循环遍历 【不推荐使用】,

forin循环是专门用于遍历对象的, 但是对象的属性是无序的, 所以forin循环就是专门用于遍历无序的东西的, 所以不推荐使用forin循环来遍历数组

var a = [1, 2, 3];

for (var i in a) {
  console.log(a[I]);
}
// 1
// 2
// 3
  • 利用ES6中推出的for of循环来遍历数组
let arr = [1,3,5];
for (const value of arr) {
        
        console.log(value); // 1,3,5
    }
  • some(allback(element,index,array)) 方法 遍历

allback(element, index, array)回调函数,其中element数组里面的元素,index是遍历的索引array被遍历的数组

var  list = [
                {id:1,name:"奔驰",time: new Date()},
                {id:2,name:"宝马",time: new Date()},
                {id:3,name:"大众",time: new Date()}
            ]
//毁掉函数
  list.some(function (item,index) {
                    console.log(item + "------"+ index);

                })
  • forEach(allback(item,index))方法 遍历 类似 some()回调函数的参数一样
var  list = [
                {id:1,name:"奔驰",time: new Date()},
                {id:2,name:"宝马",time: new Date()},
                {id:3,name:"大众",time: new Date()}
            ]

list.forEach(function (item,index) {
                     console.log(item + "----" + index); 
                })
求最大值,平均值,和
  • 注意在求最大值的时候,假设数组中的一个值最大,不能直接赋值给0
<script>

 

  let arry = [1,4,7,6,3,10,88,9];

  let sum = 0;

  let pj = 0;
//  假设最大值 ,不能直接赋值为0,因为数组里面 可能的数据 都为负数
  let max = arry[0];

  for (let index = 0; index < arry.length; index++) {
      
      sum += arry[index];
      if(max < arry[index]){
          max = arry[index];
      }
      
  }
  console.log(sum);

  console.log(max);

  pj = sum/arry.length;

  console.log(pj +"++++++"+  arry.length)
</script>
数组元素位置调换
  • 调换比较的次数是 length/2
let arr1 = [10,20,30,40,50];

for (let i = 0; i < arr1.length/2; i++) {
    let temp = arr1[i];
    arr1[i] = arr1[arr1.length - 1 -i];
    arr1[arr1.length - 1 - i] =  temp;
    
}

console.log(arr1);

  [50, 40, 30, 20, 10]

冒泡排序

image.png
<script>
    // 冒泡排序

    let array = [30,20,60,40,10,5];
    //外层循环控制比较的 轮数  array.length - 1
    for(var i = 0; i < array.length - 1; i++){
        //内层循环比较次数 array.length - 1 - I
        for(var j = 0; j < array.length - 1 - i; j ++){
            if (array[j] > array[j + 1]) {
                let temp = array[j];
                array[j] = array[j + 1];
                array[j + 1] = temp;
            }
        }
    }

    console.log(array);
</script>
image.png

6.数组中一些常用的方法

拼接
  • concat() 用于连接两个或多个数组。它不会改变现有的数组,而仅仅会返回被连接数组的一个副本
  var aa = [1,3,5];  var bb = ["a","b","c"];
       var cc =  aa.concat(bb);
       console.log(cc);
// Array [ 1, 3, 5, "a", "b", "c" ]

数组的截取
  • slice("开始位置","结束位置") 用来截取数组的部分元素,返回一个新的数组
var arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
arr.slice(0, 3); // 从索引0开始,到索引3结束,但不包括索引3: ['A', 'B', 'C']
数组转化成字符串
  • join() 将数组各个元素是通过指定的分隔符进行连接成为一个字符串。
  • 数组名.join(符号)
var arr = [1,2,3];
        var str = arr.join("-");
        console.log(str);
        console.log(typeof str);
// 打印结果: 1-2-3
//   string
字符串转化成数组
  • split()把一个字符串分割成字符串数组
  • 语法:stringObject.split(separator,howmany)
var string1 = "h/2/3/l";
        var newArr =  string1.split("/");
        console.log(newArr);

//结果是:Array [ "h", "2", "3", "l" ]
  • Array.isArray("object") 判断一个对象是否是数组 ,返回时bool值
    //数组
    var obj = [];
    var isTR = Array.isArray(obj);
    console.log(isTR);
  • every()方法 返回一个bool值
/*
arra.every(function(数组元素,索引) {  
    })
*/
var arra = ["123","345","12"];
    arra.every(function (ele,index) {
        
        console.log(index);
        
        return true;
        
    });
  • filer() 过滤 返回一个新的数组(将满足条件的元素添加到一个新的数组中)
    /*
     * 3个参数
     * 1.数组的元素
     * 2.数组的索引
     * 3.被遍历的数组
     * */
    var arra = [10,20,30,40,50,60,70,80,90];
    var arr1 = arra.filter(function (ele,index,array) {
        
        return ele>40;
    })
    
    console.log(arr1); // [50,60,70,80,90]

自定义函数实现filter方法

Array.prototype.myFilter = function (fn) {
            let newArray = [];
            for(let i = 0; i < this.length; i++){
                let result = fn(this[i], i, this);
                if(result){
                    newArray.push(this[i]);
                }
            }
            return newArray;
        }
  • map方法:将满足条件的元素映射到一个新的数组中

注意:map方法会把数组中的元素都会调用一次callback函数,callback函数执行后的返回值(包括undefined)组合成一个新的数组 返回


let arr = [1, 2, 3, 4, 5];
  // 2.数组的map方法:将满足条件的元素映射到一个新的数组中
  //注意:map方法会把数组中的元素都会调用一次fcallback函数,
//callback函数执行后的返回值(包括undefined)组合成一个新的数组 返回

  let newArr2 = arr.map(function (item,index,itemArray) {
      if(item % 2 === 0){

          return item;  //满足条件返回item,不满足返回的是undefined
      }
  });

console.log(newArr2); // [undefined,2,undefined,4,undefined];
  • 自定义map函数
 // map实现
        Array.prototype.myMap = function (fn) {
            let newArray = new Array(this.length);
            newArray.fill(undefined);
            for(let i = 0; i < this.length; i++){
                let result = fn(this[i], i, this);
                if(result !== undefined){
                    newArray[i] = result;
                }
            }
            return newArray;
        }
  • splice("开始的位置","要删除的个数","要插入的元素")函数

    • 如果是只有2个参数则是删除元素,如果是3个参数都在则是添加元素
  • 从第2位开始删除0个元素,插入“drum”

var myFish = ["angel", "clown", "mandarin", "surgeon"];
//从第 2 位开始删除 0 个元素,插入 "drum"
var removed = myFish.splice(2, 0, "drum");
//运算后的 myFish:["angel", "clown", "drum", "mandarin", "surgeon"]
//被删除元素数组:[],没有元素被删除

  • 从第3位开始删除1个元素
var myFish = ['angel', 'clown', 'drum', 'mandarin', 'sturgeon'];
var removed = myFish.splice(3, 1);
//运算后的myFish:["angel", "clown", "drum", "sturgeon"]
//被删除元素数组:["mandarin"]
  • 从第2位开始删除1个元素,然后插入“trumpet”
var myFish = ['angel', 'clown', 'drum', 'sturgeon'];
var removed = myFish.splice(2, 1, "trumpet"); 
//运算后的myFish: ["angel", "clown", "trumpet", "surgeon"] 
//被删除元素数组:["drum"]

es6中2个数组的方法

  • find()
 //es6中的一个数组方法:find
       // 需要接受一个函数作为参数
 //当某个遍历对象符合 return条件的时候,find终止遍历,同时返回遍历对象
       var stu =  students.find(function (item) {

            return item.id === student.id

        })

        console.log(stu);

        for (var key in student){
           stu[key] = student[key];
        }

  • findIndex()查询元素的索引值
function (id) {
                //根据 ID 找到元素的 索引 根据索引删除元素

                //es6 查找元素的Index
                //数组里面存放的是 对象
                var index =  this.list.findIndex(function (item) {

                    return item.id === id;
                });

                this.list.splice(index,1);



            }

数组去重的2种方式

  • 双for循环
var arr = [1,2,2,2,3,4,5,2,3,4];
for (let i = 0; i < arr.length; i++) {
       for (let j = i + 1; j < arr.length; j++) {
           if(arr[i] == arr[j]){
       //相同删除这个元素
            arr.splice(j,1);
            //如果有连续相同的元素,那么出现问题,当删除元素时,索引发生了变化
            j--;
           }
       }
        
    }
    console.log("huiswh");
    console.log(arr);
    //结果是 [1,2,3,4,5]

  • 利用 json对象去重
    • 原理是:key是唯一的
 //数组去重
    var arr = [1,2,2,2,3,4,5,2,3,4];
    //利用对象 去重
    var arrDic = {};
    arr.forEach(function(item,index){
        arrDic[item] = item;

    });

    console.log(arrDic);

排他思想

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>单选 排他思想</title>
    <style>
        .damao{
            background-color: #FF6B39;
        }
    </style>
    <script>
        window.onload = function () {

            var btns = document.getElementsByTagName("button");
            for (var i = 0; i < btns.length; i ++){

                btns[i].onclick = function () {

                    for (var j = 0; j < btns.length; j++){
                        btns[j].className = "";
                    }

                    this.className = "damao";
                }



            }

        }
    </script>
</head>
<body>

<button>排他思想</button>
<button>排他思想</button>
<button>排他思想</button>
<button>排他思想</button>
<button>排他思想</button>

</body>
</html>
110.gif
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>数组</title>
    <style>
        .box {
            width: 300px;
            height: 30px;margin: 100px auto;
            position: relative;

        }
        .box input {
            width: 200px;
            height: 25px;
        }

        .box label {
            font-size: 12px;
            color: #ccc;
            position: absolute;
            top: 8px;
            left: 10px;
            cursor: text;
        }

    </style>
    <script>
        window.onload = function () {
            function $(id) {
                return document.getElementById(id);
            }

            $("txt").oninput =function () {

                if (this.value == "") {
                    $("message").style.display = "block"
                } else  {
                    $("message").style.display = "none"
                }

            }

        }
    </script>
</head>
<body>

    <div class="box">
        <input type="text" id="txt">
        <label for="txt" id="message">国际大牌</label>
    </div>



</body>
</html>


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容

  • 一:JS中的数组格式 在C语言中,定义的数组类型的结构是连续的。在内存中,会根据定义的数组的类型和大小,确定一片对...
    安静的牛蛙阅读 461评论 0 0
  • 内置对象 内置对象是JS语言自带对象,提供了一些基本的功能,供开发者来使用。浏览器上跑的内置对象Math,Stri...
    Victor细节阅读 315评论 0 0
  • 1. 数组的本质 本质上,数组也是一个对象 JavaScript 语言规定,对象的键名一律为字符串,所以,数组的键...
    icaojinyu阅读 246评论 0 0
  • 在开发中,数组的使用场景非常多,平日中也涉及到很多数组的api/相关操作,一直也没有对这块内容进行一块整理总结,很...
    LiLi原上草阅读 767评论 0 13
  • title: JS中的数组 date: 2018-9-26 22:42:25tags: [JavaScript]c...
    祈念念念阅读 176评论 0 0