• Js之数组


    数组的创建

    Array 对象用于在单个的变量中存储多个值。

    创建 Array对象的语法

    
            new Array();
            new Array(size);
            new Array(element0, element1, ..., elementn);
                 

    如果调用构造函数 Array() 时没有使用参数,那么返回的数组为空,length 字段为 0。当调用构造函数时只传递给它一个数字参数,该构造函数将返回具有指定个数、元素为 undefined 的数组。当把构造函数作为函数调用,不使用 new 运算符时,它的行为与使用 new 运算符调用它时的行为完全一样。

    JS中数组的操作

    数组元素的添加

    arrayObj.push([item1 [item2 [. . . [itemN ]]]])// 将一个或多个新元素添加到数组结尾,并返回数组新长度

    arrayObj.unshift([item1 [item2 [. . . [itemN ]]]])// 将一个或多个新元素添加到数组开始,数组中的元素自动后移,返回数组新长度

    arrayObj.splice(insertPos,0,[item1[, item2[, . . . [,itemN]]]])//将一个或多个新元素插入到数组的指定位置,插入位置的元素自动后移,返回""。

    数组元素的删除

    arrayObj.pop()//移除最后一个元素并返回该元素值

    arrayObj.shift() //移除最前一个元素并返回该元素值,数组中元素自动前移

    arrayObj.splice(deletePos,deleteCount) //删除从指定位置deletePos开始的指定数量deleteCount的元素,数组形式返回所移除的元素

    数组的截取和合并

    arrayObj.slice(start, [end]) //以数组的形式返回数组的一部分,注意不包括 end 对应的元素,如果省略 end 将复制 start 之后的所有元素

    arrayObj.concat([item1[, item2[, . . . [,itemN]]]]) //将多个数组(也可以是字符串,或者是数组和字符串的混合)连接为一个数组,返回连接好的新的数组

    
            var hege = ["Cecilie", "Lone"];
            var stale = ["Emil", "Tobias", "Linus"];
            var kai = ["Robin"];
            var children = hege.concat(stale,kai); 
            //  Cecilie,Lone,Emil,Tobias,Linus,Robin 
            //  用于连接两个或多个数组。该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。
                     

    数组的拷贝

    arrayObj.slice(0) //返回数组的拷贝数组,注意是一个新的数组,不是指向

    arrayObj.concat() //返回数组的拷贝数组,注意是一个新的数组,不是指向

    数组元素的排序

    arrayObj.reverse() //反转元素(最前的排到最后、最后的排到最前),返回数组地址

    arrayObj.sort() //对数组元素排序,返回数组地址

    数组元素的字符串化

    arrayObj.join(separator):返回字符串,这个字符串将数组的每一个元素值连接在一起,中间用 separator 隔开。

    toLocaleString:把数组转换为本地数组,并返回结果。

    toString:把数组转换为字符串,并返回结果。

    valueOf:返回数组对象的原始值。

    toSource():返回该对象的源代码。

    挖掘比较

    JavaScript 提供了多种新增,移除,替换数组元素的方法,但是有些会影响原来的数组;有些则不会,它是新建了一个数组。

    • array.splice() 影响原来的数组,array.slice() 不影响原来的数组,如果知道替换哪一个元素,可以使用 array.splice() 。
      
                  var mutatingReplace = ['a', 'b', 'c', 'd', 'e'];  
                  mutatingReplace.splice(2, 1, 30);     // ['a', 'b', 30, 'd', 'e']  
                  // 或者
                  mutatingReplace.splice(2, 1, 30, 31);    // ['a', 'b', 30, 31, 'd', 'e']
                      
    • 使用 array.push() 和 array.ushift() 新增元素会影响原来的数组。
    • 两种方式新增元素不会影响原数组

      第一种是 array.concat()

      
                  const arr1 = ['a', 'b', 'c', 'd', 'e'];
                  const arr2 = arr1.concat('f'); // ['a', 'b', 'c', 'd', 'e', 'f'];
                  console.log(arr1); // ['a', 'b', 'c', 'd', 'e']
                  

      第二种方法是使用 JavaScript 的展开(spread)操作符,展开操作符是三个点(…)

      
                  const arr1 = ['a', 'b', 'c', 'd', 'e'];
                  const arr2 = [...arr1, 'f']; // ['a', 'b', 'c', 'd', 'e', 'f'] ;
                  const arr3 = ['z', ...arr1]; // ['z', 'a', 'b', 'c', 'd', 'e'];
                  

      展开操作符会复制原来的数组,从原数组取出所有元素,然后存入新的环境

    • 使用 array.pop() 和 array.shift() 移除数组元素时,会影响原来的数组。可以通过一个变量获取被移除的元素。
    • array.splice() 也可以删除数组的元素
      
                  var mutatingRemove = ['a', 'b', 'c', 'd', 'e'];  
                  mutatingRemove.splice(0, 2); // ['c', 'd', 'e'];
                  

      像 array.pop() 和 array.shift() 一样,array.splice() 同样返回移除的元素。

    • array.filter() 方法基于原数组创建一个新数组,新数组仅包含匹配特定条件的元素。

      filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。不会对空数组进行检测。不会改变原始数组。

      
                  const arr1 = ['a', 'b', 'c', 'd', 'e'];
                  const arr2 = arr1.filter(a => a !== 'e');
                  // 或者
                  const arr2 = arr1.filter(a => {  
                    return a !== 'e';
                  });
                  //以上代码的条件是“不等于 ‘e’ ”,因此新数组(arr2)里面没有包含 ‘e’。
                  //单行箭头函数,’return’ 关键字是默认自带的,不需要手动书写。可是,多行箭头函数就需要明确地返回一个值。
                       

      array.filter(function(currentValue,index,arr), thisValue)

      
                      var ages = [32, 33, 16, 40];
                      
                      function checkAdult(age) {
                          return age >= 18;
                      }
                      
                      function myFunction() {
                          document.getElementById("demo").innerHTML = ages.filter(checkAdult);
                      }
                           
    • array.map() 创建一个新数组,并且可以检查每一个元素,根据特定的条件替换它们。

      map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。不会对空数组进行检测。不会改变原始数组。

      
                  const arr1 = ['a', 'b', 'c', 'd', 'e']  
                  const arr2 = arr1.map(item => {  
                    if(item === 'c') {
                      item = 'CAT';
                    }
                    return item;
                  });
                  // ['a', 'b', 'CAT', 'd', 'e']
                       

      array.map() 是个强力方法,可以用于转换数据,而不污染原先的数据源。

      
                  const origArr = ['a', 'b', 'c', 'd', 'e'];  
                  const transformedArr = origArr.map(n => n + 'Hi!');    
                  // ['aHi!', 'bHi!', 'cHi!', 'dHi!', 'eHi!']  
                  console.log(origArr);     
                  // ['a', 'b', 'c', 'd', 'e'];    // 原数组毫发无损
                      

      array.map(function(currentValue,index,arr), thisValue)

    • array.every()用于检测数组所有元素是否都符合指定条件(通过函数提供)。检测数组中的所有元素,如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。如果所有元素都满足条件,则返回 true。
      
              var ages = [32, 33, 16, 40];
              
              function checkAdult(age) {
                  return age >= 18;
              }
              
              function myFunction() {
                  document.getElementById("demo").innerHTML = ages.every(checkAdult);
              }
              // every() 不会对空数组进行检测。
              // every() 不会改变原始数组。
                       

      array.every(function(currentValue,index,arr), thisValue)

    • array.some()方法用于检测数组中的元素是否满足指定条件(函数提供)。检测数组中的所有元素,如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。如果有一个元素满果没有满足条件的元素,则返回false。
      
                  var ages = [32, 33, 16, 40];
                  
                  function checkAdult(age) {
                      return age >= 18;
                  }
                  
                  function myFunction() {
                      document.getElementById("demo").innerHTML = ages.some(checkAdult);
                  }
                  // every() 不会对空数组进行检测。
                  // every() 不会改变原始数组。
                       

      array.some(function(currentValue,index,arr), thisValue)

    • indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。如果在数组中没找到字符串则返回 -1。
    • lastIndexOf() 方法可返回一个指定的字符串值最后出现的位置,在一个字符串中的指定位置从后向前搜索。如果在数组中没找到字符串则返回 -1。

      array.lastIndexOf(item,start)

  • 相关阅读:
    在前端眼中pc端和移动的开发区别
    两个对象的合并
    关于后台传来的json是含英文字母的string
    关于jquery的取消阻止默认事件
    练习:模态对话框
    JS之DOM节点增删改查与属性设置
    JS之DOM Event(事件)
    JS的DOM对象之DOM节点
    JS的history对象和location对象
    JS的BOM对象之window对象,利用window对象方法实现定时器
  • 原文地址:https://www.cnblogs.com/wwkk/p/6840935.html
Copyright © 2020-2023  润新知