• JS 常用数组整理


    转换方法

    所有对象都具有toLocaleString()、toString()、valueOf()方法。其中调用数组的toString方法会返回以数组中的每个值的字符串形式拼接而成的一个以逗号分割的字符串。

    而调用valueOf()方法返回的还是数组。

    var colors = ['red','blue','green'];
    console.log(colors.toString());
    console.log(colors.valueOf());
    console.log(colors.toLocaleString());
    得到的结果如图所示:

     另外toLocaleString()方法经常会返回跟toString()和valueOf()方法相同的值。但也不是总如此。当调用数组的toLocaleString()方法时,它也会创建一个数组值的以逗号分割的字符串。而与前两个方法唯一不同的是,这一次为了取得每一项的值,调用的每一项的toLocaleString()方法,而不是toString()方法。如下面例子:

    var person1 = {
        toLocaleString: function(){
            return "Nikolaos";
        },
        toString: function(){
            return "Nicholaos";
        }
    }
    var person2 = {
        toLocaleString: function(){
            return "Grigorios";
        },
        toString: function(){
            return "Greg";
        }
    }
    
    var person = [person1,person2];
    alert(person); //Nicholaos,Greg
    alert(person.toString()); //Nicholaos,Greg
    alert(person.toLocaleString());//Nikolaos,Grigorios

    说明:由于alert()要接收字符串参数,所有它会在后台调用toString()方法,得到跟直接调用toString()方法一样的结果。

    数组继承的toLocaleString()、toString()、valueOf()方法,在默认情况下都会以逗号分割的字符串的形式返回数组项。可以使用join()方法,则可以使用不同的分隔符来构建这个字符串。

    p.s.

    toLocaleString根据本地时间把 Date 对象转换为字符串:

    var d=new Date();
    var n=d.toLocaleString();
    // 2022/7/4 17:25:02
    //还可以将数字变成千分位格式:
    let num=12345678; console.log(num.toLocaleString()); // 12,345,678

    // 可以将时间转换为 24 小时制:
    // 2021/10/12 下午7:39:06
    console.log(new Date().toLocaleString() 
    
    // 2021/10/12 19:39:06
    console.log(new Date().toLocaleString('chinese',{hour12:false}))

      

    join()方法

    join() 方法用于把数组中的所有元素放入一个字符串。元素是通过指定的分隔符进行分隔的。返回一个字符串。

    var colors = ['red','blue','green'];
    console.log(colors.join(',')); //red,blue,green
    console.log(colors.join('||')); //red||blue||green

    栈方法(后进先出)

    ArrayObj.push()方法

    ArrayObj.pop()方法

    ArrayObj.push():就是向数组末尾添加新的元素,返回的是数组新的长度。
    ArrayObj.pop():就是向数组中删除数组最后一个元素并且返回该元素。如果数组为空就返回undefined。

    队列方法(先进先出)

    ArrayObj.shift()

    ArrayObj.unshift()

    ArrayObj.shift():方法用于把数组中的第一个元素删除,并返回第一个元素的值。
    如果数组是空的,则shift() 方法不进行任何操作,返回undefined。请注意,该方法不创建新数组,而是直接修改原来的数组该方法会改变数组的长度

    ArrayObj.unshift() :该方法可把它的参数顺序添加到数组的头部。它直接修改了数组,而不是创建一个新的数组。返回的是新数组的长度。 
    unshift()在IE6,IE7下,数据有添加成功,但返回值却是undefined.

    重排序方法

    reverse()方法

    sort()方法

    reverse()方法会对反转数组项的顺序。

    var values = [1, 2, 3, 4, 5];
    values.reverse();
    alert(values);  //5,4,3,2,1

    这里数组的初始值及顺序是1、2、3、4、5。而调用数组的reverse()方法后,其值的顺序变成了5、4、3、2、1。

    sort()方法按升序排列数组——即最小的值位于最前面,最大的值排在最后面。为了实现排序,sort()方法会调用每个数组项的toString()转型方法,然后比较得到字符串,以确定如何排序。即使数组中的每一项都是数组,sort()方法比较的也是字符串,如下所示:

    var values = [0, 1, 5, 10, 15];
    values.sort();
    alert(values);  //0,1,10,15,5

    这种排序方式在很多情况下都不是最佳方案。因此sort()方法可以接受一个比较函数作为参数,以便我们指定那个值位于那个值的前面。

    比较函数接受两个参数,如果第一个参数应该位于第二个之前则返回一个负数,如果两个参数相等,则返回0,如果第一个参数位于第二个之后则返回一个正数。以下就是一个简单的比较函数:

    function compare(value1, value2) {
       if (value1 < value2) {
           return -1;
       } else if (value1 > value2) {
           return 1;
       } else {
           return 0;
       }
    }

    这个比较函数可以使用于大多数数据类型,只要将其作为参数传递给sort()方法即可,如下面这个例子所示:

    var values = [0, 1, 2, 5, 10, 15];
    values.sort(compare);
    alert(values);  //0,1,5,10,15

    在将比较函数传递到sort()方法之后,数值仍然保持了正确的升序。当然,也可以通过比较函数产生降序排序的结果,只要交换比较函数返回的值即可:

    function compare(value1, value2) {
       if (value1 < value2) {
           return 1;
       } else if (value1 > value2) {
           return -1;
       } else {
           return 0;
       }
    }
    var values = [0, 1, 2, 5, 10, 15];
    values.sort(compare);
    alert(values);  //15,10,5,1,0

    reverse()和sort()方法会返回值是经过排序之后的数组。

    对于数值类型或者其valueOf方法会返回数值类型的对象类型,可以使用一个更简单的比较函数。这个函数只要用第二个值减第一个值即可:

    function compare(value1, value2) {
       return value2 - value1;
    }

    由于比较函数通过返回一个小于零、等于零或大于零的值来影响排序结果,因此减法操作就可以适当处理所有情况。

    操作方法

    concat()方法

    slice()方法

    splice()方法

    concat() 方法用于连接两个或多个数组。
    该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。

    <script type="text/javascript">
    
    var a = [1,2,3];
    document.write(a.concat(4,5));
    
    </script>

    输出的结果:1,2,3,4,5

    slice(start,end)方法
    start 必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。 
    end 可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。
    返回值:返回一个新的数组,包含从 start 到 end (不包括该元素)的 arrayObject 中的元素。

    splice() 方法用于插入、删除或替换数组的元素
    语法:arrayObject.splice(index,howmany,element1,.....,elementX)

    index 必需。规定从何处添加/删除元素。
    该参数是开始插入和(或)删除的数组元素的下标,必须是数字。

    howmany 必需。规定应该删除多少元素。必须是数字,但可以是 "0"。
    如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。

    element1 可选。规定要添加到数组的新元素。从 index 所指的下标处开始插入。 
    elementX 可选。可向数组添加若干元素。

    返回值:如果从 arrayObject 中删除了元素,则返回的是含有被删除的元素的数组。
    说明:splice() 方法可删除从 index 处开始的零个或多个元素,并且用参数列表中声明的一个或多个值来替换那些被删除的元素。

    下面简要概括一下slice()与splice()方法

    slice(start, end); slice()方法返回从参数指定位置开始到当前数组末尾的所有项。如果有两个参数,该方法返回起死和结束位置之间的项,但不包括结束位置的项。

    var colors = ["red", "green", "blue", "yellow", "purple"];
    var colors2 = colors.slice(1);
    var colors3 = colors.slice(1,4);
    
    console.log(colors2); // green, blue, yellow, purple
    console.log(colors3); // green, blue, yellow

    splice()有删除,插入,替换的功能

    删除
    需要两个参数,要删除的第一项的位置和要删除的项数。

    var colors = ["red", "green", "blue"];
    var removed = colors.splice(0,1);
    console.log(colors); // greeen, blue
    console.log(removed); // red

    插入
    需要三个参数:起始位置、0(要删除的项数)和要插入的项

    var colors = ["red", "green", "blue"];
    var removed = colors.splice(1,0,"yellow", "orange");
    console.log(colors); // ["red", "yellow", "orange", "green", "blue"]
    console.log(removed); // 返回空

    替换
    需要三个参数:起始位置、要删除的项数和要插入的任意数量的项。

    var colors = ["red", "green", "blue"];
    var removed = colors.splice(1,1,"yellow", "orange");
    console.log(colors);  // ["red", "yellow", "orange", "blue"]
    console.log(removed); // ["green"]

    filter()方法

    1、filter()方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素(如果没有符合条件则返回空数组)。

    注意

    filter()方法不会对空数组进行检测,不会改变原始数组;

    语法
    
    array.filter(function(currentValue,index,arr), thisValue)
    
    参数 描述
    function(currentValue,index,arr)
    必须,函数,数组中的每个元素都会执行整个函数
    
    参数 描述
    currentValue 必须,当前元素的值
    index 可选,当前元素的索引值
    arr 可选,当前元素属于的数组对象
    thisValue 可选。对象作为该执行回调函数时使用,如果没有符合条件的元素则返回空数组。

    实际应用

     
    var ages = [32, 33, 16, 40];
    let newArr = ages.filter((age) => {
        return age>18
    })
    console.log(newArr) //[32,33,40]
     
    过滤元素用起来十分方便
    让数组中指定元素索引的元素排到首位;
    let test = [1, 2, 3, 4, 5];
    function getSit(index) {
        newarr = (test.filter((x, y) => { return y != index }));
        newarr.unshift(test[index])
        return newarr
    }
    console.log(getSit(3))

    map()方法定义在JavaScript的Array中,它返回一个新的数组,数组中的元素为原始数组调用函数处理后的值。
    注意:

    • map()不会对空数组进行检测
    • map()不会改变原始数组

    map语法

    array.map(function(currentValue, index, arr), thisIndex)
    参数说明:
    
    function(currentValue, index, arr):必须。为一个函数,数组中的每个元素都会执行这个函数。其中函数参数:
    currentValue:必须。当前元素的的值。
    index:可选。当前元素的索引。
    arr:可选。当前元素属于的数组对象。
    thisValue:可选。对象作为该执行回调时使用,传递给函数,用作"this"的值
    

    实例

    返回由原数组中每个元素的平方组成的新数组:

    let array = [1, 2, 3, 4, 5];
    
    let newArray = array.map((item) => {
        return item * item;
    })
    
    console.log(newArray)  // [1, 4, 9, 16, 25]


  • 相关阅读:
    【NOI1999、LOJ#10019】生日蛋糕(搜索、最优化剪枝、可行性剪枝)
    【NOI2016】区间
    【CodeForces688A】Opponents
    「LOJ10150」括号配对
    HDU6444(子段和、分情况比较)
    牛客练习赛41E(球的体积并)
    Codeforces 1154G(枚举)
    POJ1830(异或高斯消元)
    Codeforces 1114F(欧拉函数、线段树)
    牛客小白月赛13 G(双向搜索)
  • 原文地址:https://www.cnblogs.com/caihongmin/p/16443767.html
Copyright © 2020-2023  润新知