数组(Array)的方法 -- 大一下第十五周 + 第十六周

数组(Array)的方法

toLocaleString()方法

toLocaleString() 返回一个字符串表示数组中的元素。数组中的元素将使用各自的 toLocaleString 方法转成字符串,这些字符串将使用一个特定语言环境的字符串(例如一个逗号 “,”)隔开。

语法:
arr.toLocaleString([locales[,options]]);

在这里插入图片描述

返回值和toString()一样

shift()方法

用于把数组第一个元素从中删除,并返回第一个元素的值

语法:
arrayObject.shift();

直接在原数组上面修改,不会创建新数组

如果数组时空,进行shift()操作,会返回undefined

unshift()方法

向数组的开头添加入一个或更多元素,返回新长度

语法:
arrayObject.unshift(newelement1,newelement2,…,newelementX)

在这里插入图片描述

和shift()方法一样,不创建新数组,直接在原数组上面修改

sort()方法

默认按照升序排列,但实际上,sort()方法会将每一项进行toString()转型方法,然后进行字符串的第一项的Unicode码进行比较,所以一般情况下的排序很有可能会产生错误

所以想要得到想要的结果就要传入一个比较函数
比较函数的规则:
比较函数应该有两个参数

  • 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。(不会互换)
  • 若 a 等于 b,则返回 0。
  • 若 a 大于 b,则返回一个大于 0 的值。(将a,b互换)

返回数组,是直接在原数组上进行排序修改的,不生成副本

    var arr = [12, 5, 3, 7, 8];

    function compare(a, b) {
    
    
        return a - b;
    }

    arr.sort(compare);
    console.log(arr);//3,5,7,8,12

如果要改为降序排列,直接早return那里一改就好了

把compare比较函数传入,每个a,b都是直接从数组里面传入的

concat()方法

将最开始的数组与里面的参数拼接,返回新数组

slice()方法

第一个参数是表示从哪个位置开始,第二个参数是表示在哪个位置结束,但是实际返回的内容不包括最后的那个位置的内容。

如果没有第二个参数,那就从第一个参数开始返回到数组结尾

不会影响原数组

splice()方法

该方法是向数组中添加或删除项目,然后返回被删除的项目。如果没有数组被删除,那就返回空字符串

会改变原始数组

以下就是这个方法的参数

在这里插入图片描述

利用这个方法可以实现以下三种想要的效果

  1. 删除
    直接设置前两个属性值(从哪里开始并且删除多少个值)

  2. 插入
    设置开始的位置,将第二个参数设置为0(表示删除0个元素),后续填写想要插入的数值,那就会将想要的数值进行插入操作

  3. 替换
    就是在三个参数及以上情况的时候,删除与插入个数不同数量的项,然后就会实现替换

indexOf()和lastIndexOf()方法

都是两个参数,第一个参数是想要搜索的值,第二个值是表示从数组的哪里开始进行全面搜索

里面搜索进行的是比较是全等比较,不会存在隐式类型转换

找到会返回着到的位置,没找到会返回-1

    var person = {
    
    
        name : 'li'
    };
    var people = [{
    
    name : 'li'}];
    
    var morePeople = [person];
    console.log(people.indexOf(person));//-1
    console.log(morePeople.indexOf(person));//0

为什么第一条会输出-1而第二条输出0?
因为在js中的比较中,indexOf是==比较,这种时候再比较对象是引用值的时候,比较的是引用值的地址,也就是比较地址指针

准确来说,在进行引用值的比较的时候,无论是两个等号的比较或者是三个等号的比较都是比较地址指针

所以第一条输出-1,第二条输出0

如果是原始值和引用值进行比较,那么是将引用值转换为原始值,然后进行值比较,当然在这种情况下,进行的只有两个等号的比较,三个等号的比较直接是false

迭代方法(every,filter,forEach,map,some)

在往这些方法里面可以传入一个函数,函数拥有三个参数,分别是数组项的值,该项在数组中的位置,数组对象本身

  • every()
    每一项都返回true的时候才会返回true 一假即假
    三个参数和forEach一样

  • filter()
    将在给定函数返回true的每一项组成一个新数组,然后返回新数组(可以查询有些符合条件的数组项)筛选
    三个参数和forEach一样
    return 不会终止迭代

  • forEach()
    没有返回值,三个参数分别是value,index,arr,数组的值,数组的索引,数组本身
    return 不会终止迭代

  • map()
    返回每次函数调用的结果组成的数组(适合创建包含的项与另一个数组一一对应的数组)
    三个参数和forEach一样

  • some()
    只要存在一项是true,就会返回true,然后停止执行,三个参数和forEach一样 一真即真

归并方法(reduce,reduceRight)

方法内部有四个参数,前一个值,现在的值,当前项索引,数组对象

在第一次的时候,当前项直接就是第1位上的值,前一个值是第0位上的值,此后前一项都是前面值的累加和

reduceRight就是进行方法是从反方向进行的

from()方法

将类数组或可遍历的对象转换为真正的数组
第一个参数就是伪数组

var obj = {
    
    
    0 : 9,
    1 : 3,
    2 : 7,
    length : 3
}
var arr = Array.from(obj);

console.log(obj);
console.log(arr);     

在这里插入图片描述

还可以接受第二个参数,第二个参数是函数,可以对数组进行加工处理,类似于map

var obj = {
    
    
    0 : 9,
    1 : 3,
    2 : 7,
    length : 3
}
var arr = Array.from(obj, item => item*2);

console.log(obj);
console.log(arr);        

在这里插入图片描述

find()方法

用于找出第一个符合条件的数组成员,参数就是一个筛选符合条件的函数,这个函数返回布尔值,如果最后没有找到,就返回undefined

findIndex()方法

查找第一个符合条件的成员的索引,没找到返回-1,参数和find一样

includes()方法

判断某个数组是否含有给定的值,返回布尔值

let arr = [1, 2, 3];
console.log(arr.includes(2));//true
console.log(arr.includes(4));//false

猜你喜欢

转载自blog.csdn.net/weixin_50948265/article/details/117933214