最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • javascript——数组篇

    正文概述 掘金(Find_Object)   2021-04-19   565

    1、什么是数组?

    数组的标准定义为:一个存储元素的线性集合(collection),元素可以通过索引来任意存取,索引通常为数字,用来计算元素存储位置的偏移量。 如果你有了解过其他语言,就会知道所有编程语言都有类似的数据结构。但javascript的数组和其他语言有所不同。JavaScript中的数组是一种特殊的对象,索引为该对象的素性,索引可能是整数。然而,这些数字索引在内部被转换为字符串类型,这是因为JavaScript对象的属性名必须是字符串类型。 数组在JavaScript中只是一种特殊的对象,所以效率上不如其他语言中的数组高。JavaScript中的数组,严格来说应该称作对象,是特殊的JavaScript对象,在内部被归类为数组。由于Array在JavaScript中被当作对象,因此它有许多属性和方法可以在编程时使用。

    2、使用数组

    JavaScript的数组十分的灵活有许多方法可以操作数组,在使用之前首先需要创建数组。

    2.1创建数组

    法一:通过[]操作符声明一个数组变量

    var nums = []
    

    这种方式创建的数组得到的是长度为0的空数组,可以通过数组的length属性来验证这一点

    var nums = [1,2,3,4,5]
    

    你也可以通过在[]操作符声明数组的同时,放入一组元素

    法二:通过调用Array的构造函数创建数组

     let nums = new Array();
     console.log(nums.length)  //0
    

    同理你也可以在声明时设置初始值:

     let nums = new Array(1,2,3,4,5);
     console.log(nums.length)   //5
    

    在调用Array的构造函数时,可以只传入一个参数,用来指定数组的长度:

     let nums = new Array(20);
     console.log(nums.length)   //20
    

    2.2读写数组

        let arr = []  //声明
        let sums = 0
        for (let i = 0; i < 100; i++) {   //赋值
            arr[i] = i
        }
        arr.map((item, i) => {  //读取
            // console.log(item,i);
            sums += item
        })
        console.log(sums);   //4950
    

    2.2.1 由字符串生成数组

    调用字符串对象的split()方法也可以生成数组:

    let str=`we are family !`
        let arr=str.split(" ")
        arr.map((item,i)=>{
            console.log(`arr${i}:${item}`);
            /*输出:
              arr0:we
              arr1:are
              arr2:family
              arr3:!
            */
        })
    

    2.2.2 对数组的整体性操作

    是将数组作为一个整体进行的。比如整体赋值:

        let arr = []  //声明
        for (let i = 0; i < 10; i++) {   //赋值
            arr[i] = i
        }
        let arr2 = arr
    

    但是,使用这种方法把一个数组赋给另外一个数组时,只是为被赋值的数组增加了一个新的引用。当你通过原引用修改了数组的值,另外一个引用也会感知到这个变化,如:

     let arr = []  //声明
        for (let i = 0; i < 10; i++) {   //赋值
            arr[i] = i
        }
        let arr2 = arr
        arr[0]=100
        console.log(arr1[0])  //100
    

    这种行为被称为浅复制,新数组依然指向原来的数组。一个更好的方案是使用深复制,将原数组中的每一个元素都复制一份到新数组中。如可以写一个函数来深拷贝(复制)数组:

        let arr1=[0,1,2,3,4,5,6,7,8,9],arr2=[]
        function CopyArr(arr1,arr2){
            arr1.map((item,i)=>{
                arr2[i]=item
            })
            return arr2
        }
        arr2=CopyArr(arr1,arr2)
        console.log(arr2);     // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
        arr1[0]=100
        console.log(arr1[0],arr2[0]);  //100 0
    

    2.3数组方法

    1、JavaScript 方法 toString() 把数组转换为数组值(逗号分隔)的字符串。

    2、join() 方法也可将所有数组元素结合为一个字符串。

    3、pop() 方法从数组中删除最后一个元素。

    4、push() 方法(在数组结尾处)向数组添加一个新的元素。

    5、shift() 方法会删除首个数组元素,并把所有其他元素“位移”到更低的索引。

    6、unshift() 方法(在开头)向数组添加新元素,并“反向位移”旧元素。

    7、length 属性提供了向数组追加新元素的简易方法。

    8、使用 delete 会在数组留下未定义的空洞。请使用 pop() 或 shift() 取而代之。

    9、splice() 方法可用于向数组添加新项,也可删除数组中的元素。

    10、concat() 方法通过合并(连接)现有数组来创建一个新数组。

    11、slice() 方法用数组的某个片段切出新数组。

    12、sort() 方法用于对数组的元素进行排序。

    13、reverse() 方法用于颠倒数组中元素的顺序。

    14、toLocaleString() 方法把数组转换为本地字符串。

    15、valueOf() 方法返回 Array 对象的原始值。

    具体用法可见: www.w3school.com.cn/jsref/jsref…

    2.4二维和多维数组

    JavaScript只支持一维数组,但是通过在数组里保存数组元素的方式,可以轻松创建多维数组。

    2.4.1创建二维数组

    二维数组类似一种由行和列构成的数据表格。在JavaScript中创建二维数组,需要先创建一个数组,然后让数组的每个元素也是一个数组。我们需要知道二维数组要包含多少行,有了这个信息,就可以创建一个n行1列的二维数组了:

       let arr=[]
       let rows=5
       for(let i=0;i<rows;i++){
           arr[i]=[]
       }
       console.log(arr);   // [Array(0), Array(0), Array(0), Array(0), Array(0)]
    

    这样做的问题是,数组中的每个元素都是undefined。更好的方式是遵照JavaScript: The Good Parts(O'Reilly)一书第64页的例子,Crockford通过扩展JavaScript数组对象,为其增加了一个新方法,该方法根据传入的参数,设定了数组的行数、列数和初始值。下面是这个方法的定义:

    /*@ params
           numrows:行数
           numcols:列数
           initial:行列对应下的初始值
        */
        Array.matrix = function (numrows, numcols, initial) {
            let arr = []
            for (let i = 0; i < numrows; i++) {
                let columns = []
                for (let j; j < numcols; j++) {
                    columns[j] = initial
                }
                arr[i] = columns
            }
            return arr
        }
        
        let nums = Array.matrix(5,5,0);
        console.log(nums[0][0])    //0
    

    对于小规模的数据还是使用这种方式最简单,仅需一行代码即可:

     let nums = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
     console.log(nums[2][2]);   //9
    

    2.4.2处理二维数组的元素

    处理二维数组中的元素,有两种最基本的方式:按列访问和按行访问:

        let nums = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
        let total = 0
        for (let i = 0; i < nums.length; i++) {
            for (let j = 0; j < nums[i].length; j++) {
                total += nums[i][j]
            }
        }
        console.log(total) 
    

    对于多维数组无非是,内循环控制行,外循环控制列。

    2.5对象中的数组

    在对象中,可以使用数组存储复杂的数据。

        function wageTemp() {
            this.dataSource = []
            this.add = add
            this.averag = averag
        }
        function add(data) {
            this.dataSource.push(data)
        }
        function averag() {
            let total = 0
            this.dataSource.map(item => {
                total += item
            })
            return total / this.dataSource.length
        }
    
        let gzTemp = new wageTemp()
        gzTemp.add(100)
        gzTemp.add(90)
        gzTemp.add(80)
        gzTemp.add(88)
        gzTemp.add(99)
        console.log(gzTemp.averag());    //91.4
    
    

    (以上内容为阅读《数据结构与算法JavaScript描述》总结笔记,如有雷同,纯属巧合...)


    起源地下载网 » javascript——数组篇

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元