javaScript 中数组的操作

目录
[隐藏]

1、length

计算数组的长度

var arr = ["aaa","bbb"];
alert(arr.length);

2、索引

通过索引获取对应值,同时也可以改变索引对应的值

var arr = ["aaa","bbb"];
alert(arr[0]);//弹出aaa
arr[0] = "111";
alert(arr[0]);//弹出111

3、indexOf

返回指定元素的位置,若元素不存在返回-1

var arr = ["aaa","bbb",111];
alert(arr.indexOf("aaa");//弹出0
alert(arr.indexOf("111");//弹出-1,"111"与111是不同的元素

4、slice

接受一个或两个参数,参数对应的是要返回项的起始位置和结束位置,若只有一个参数,该方法返回从参数指定位置到数组结尾的所有项,如果有两个参数则返回起始位置到结束位置之间的项但不包括结束位置项,返回的结果是一个新的数组,原数组不变

var arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
alert(arr.slice(0, 3)); // 从索引0开始,到索引3结束,但不包括索引3: ['A', 'B', 'C']
alert(arr.slice(3)); // 从索引3开始到结束: ['D', 'E', 'F', 'G']

5、push

向数组末尾添加若干元素,返回添加元素后数组的长度

var arr = [1,2];
alert(arr.push('a','b'));//返回数组的长度2

6、pop

删除数组末尾最后一个元素,返回被删除的元素,若数组为空则返回undefined

var arr = [1,2,3];
alert(arr.pop());//返回被删除的元素3
var arr1 = [];
alert(arr1.pop());//返回undefined

7、unshift

在数组头部添加若干元素,返回添加元素后数组的长度

var arr = [1,2,3];
alert(arr.unshift("a","b"));//返回数组的长度5

8、shift

删除数组头部的第一个元素,并返回被删除的元素,若数组为空则返回undefined

var arr = [1,2,3];
alert(arr.shift());//返回头部被删除的项1

9、sort

对数组进行排序,返回排序以后的数组,默认把所有元素转化为字符之后再进行排序,排序以后会改变原数组

var arr = ["3","2",11];
alert(arr.sort());//返回11,2,3

可以通过一个自定义的比较函数来进行排序,比较函数接收两个参数,如果第一个参数应该位于第二个参数之前应该返回负数,如果第一个参数应该位于第二个参数之后应该返回正数,若相等返回0,排序之后会改变原数组

function compare(val1,val2){
    return val1-val2;
}
var arr = [3,2,9,4];
alert(arr.sort(compare));//返回2,3,4,9

10、reverse

对数组中的数据进行反转,返回反转后的数组

var arr = ["333","222"];
alert(arr.reverse());

11、splice

从指定位置删除若干元素,然后再从该位置添加若干元素,结果返回被删除的元素,第一个参数表示起始删除的位置,第二个参数表示要删除元素的个数,之后的元素表示要添加的元素

var arr = ["a","b","c"];
alert(arr.splice(1,2,"d","e"));//从位置1开始删除2个元素,在1位置添加"d","e"两个元素,返回"b","c"
alert(arr);//arr数组变为a,d,e
alert(arr.splice(0,3));//从位置0开始,删除3个元素,返回"a","d","e"
alert(arr);//arr数组为空

11、concat

把当前数组与另一个数组连接起来,并返回新的元素,原来的数组不被改变,concat可以接收任意个元素和数组,并把数组拆开放入新的数组中

var arr = ["a","b","c"];
alert(arr.concat([1,2,3]));//数组arr不变,返回["a","b","c",1,2,3]
alert(arr.concat([1,2,[3,4]]));//返回["a","b","c",1,2,3,4]

12、join

将数组中的每一个元素用指定的字符串连接起来,返回字符串

var arr = ["a","b","c"];
alert(arr.join(","));//返回a,b,c

## 13、map

对数组中的每一项运行函数,返回函数运行结果组成的数组,函数的参数是一个函数,而该函数接收三个参数:数组当前值,数组索引、数组

var arr = [1,2,3,-1];
alert(arr.map(function(x) {
      return x * x;
}
));//返回1,4,9,1

## 14、reduce

从数组的第一项开始,逐个遍历到最后,函数接受两个参数,一个是在数组上调用的函数和归并的初始值(可选),而调用数组的函数接受四个参数:前一个值、当前值、当前值索引、当前数组,第一次调用时,前一个值是数组第一项,当前值是数组第二项

var arr = [1,2,3,-1];
var result = arr.reduce(function(prev,cur,index,array){
     return prev+cur
})
alert(result);//返回5

## 15、filter

对数组中的每一项运行函数,返回该函数返回true的元素组成的数组

var arr = [1,-3,2,-4,-6];
var newArr = arr.filter(function(x){
    if(x>=0){
        return true;
    }else{
        return false;
    }
})
alert(newArr)//返回1,2

## 16、toString

该方法返回由数组中每个值的字符串以逗号分隔而拼接的字符串,数组的每一项调用的是toString

var arr = [1,2];
alert(arr.toString());//返回1,2

17、valueOf

调用该方法返回的依旧是数组

var arr = [1,2];
alert(arr.valueOf());//alert返回的都是字符串,故返回1,2,而arr.valueOf()是数组
alert(arr.valueOf() instanceof Array);//返回true

18、toLocaleString

该方法返回一个数组值以逗号分隔的字符串,与toString不同的是数组的每一项调用的是toLocaleString

var arr = [1,2];
alert(arr.toLocaleString());//返回1,2

19、Array.from()

用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括ES6新增的数据结构Set和Map)。

// 将 dom 对象集合转换为数组
const divs = document.querySelectorAll('div');
console.log(Array.from(divs));

// 将 arguments 对象转换为数组
function test() {
    const args = Array.from(arguments);
    console.log(args);
}
test(1, 2, 3);

// 将字符串转换为数组,统计其长度(以便正确处理各种Unicode字符)
function countSymbols(string) {
    return Array.from(string).length;
}

20、Array.of()

用于将一组值,转换为数组。

Array.of(3); // [3]
Array.of(1, 2, 3) // [1, 2, 3]

21、copyWithin()

在当前数组内部,将指定位置的成员复制到其他位置(会覆盖原有成员),然后返回当前数组。

Array.prototype.copyWithin(target, start = 0, end = this.length)

// 示例
[1, 2, 3, 4, 5].copyWithin(0, 2, 4); // [3, 4, 5, 4, 5]

22、find() 和 findIndex()

find 用于找出第一个符合条件的数组成员。它的参数是一个回调函数。

[1, 2, 3].find((n) => n > 1); // 2

findIndex 方法的用法与 find 方法非常类似,返回第一个符合条件的数组成员的位置,如果所有成员都不符合条件,则返回 -1

[1, 2, 3].findIndex((n) => n > 1); // 1

23、fill()

使用给定值填充一个数组。

[1, 2, 3].fill(8); // [8, 8, 8]

// 指定起始和结束位置
[1, 2, 3].fill(7, 1, 2); // [1, 7, 3]

24、entries(),keys() 和 values()

ES6 提供三个新的方法: entries()keys()values() ——用于遍历数组。可以用 for...of 循环进行遍历,唯一的区别是 keys()是对键名的遍历、values() 是对键值的遍历,entries() 是对键值对的遍历。

const a = [1, 2, 3];

for (let index of a.keys()) {
    console.log(index); // 0, 1, 2
}

25、includes()

返回一个布尔值,表示某个数组是否包含给定的值,与字符串的 includes 方法类似。

[1, 2, 3].includes(2)     // true
[1, 2, 3].includes(4)     // false
[1, 2, NaN].includes(NaN) // true

[1, 2, 3].includes(3, 3);  // false
[1, 2, 3].includes(3, -1); // true

26、扩展运算符(…)

将一个数组转为用逗号分隔的参数序列。

const a = [1,2,3];
const b = [...a];
console.log(b); // [1, 2, 3]

// 用于参数,可序列化为多个参数
Math.max(...[14, 3, 77]);
// 相当于
Math.max(14, 3, 77);

更多参考

  • http://es6.ruanyifeng.com/#docs/array
  • http://www.w3school.com.cn/jsref/jsref_obj_array.asp
点赞 (0)
  1. 清醒觉醒说道:

    新疆和西藏相同,自1979年以来,政府对少数民族的绥靖、妥协、姑息政策,严重助长了少数民族的暴烈、残忍、凶恶本性。在拉萨、乌鲁木齐等地,少数民族任意殴打、骚扰、欺辱汉族,汉族忍气吞声、不敢回应,若有汉族反击,各级政府就会以什么腐朽的民族团结理论劝诫汉族,汉族的正义呼吁被压制,屈辱诉求得不到伸张。汉族被压抑,穷凶极恶的少数民族更加得意忘形,长期以来,积累下来,这些无法无天的少数民族就旁若无人地、光天化日之下挑起了西藏、新疆的,其实是让广大平民百姓蒙难的烧杀抢奸残酷事件,汉族百姓成为牺牲品。
    汉族要觉醒,汉族要凝聚,汉族要自强,汉族要智慧,汉族要尚武,汉族要强大!
    看看世界上那些被人们称羡的民族吧,日耳曼德意志人用强大说明了一切,以色列人用智慧强力说明了一切,愚昧、凶残的成吉思汗蒙古人短期内用强权、暴力征服了大半个世界。
    懦弱、退让的南宋政权、民国汪精卫、溥仪伪满政权,成为了历史、世界的笑柄。
    用铁拳的法制专政和平等的民权思想重新审视自己吧。

  2. 清醒觉醒说道:

    历史上,少数民族当政,如蒙元、满清时期,都是对汉族采取屠杀、虐待、歧视的态度,蒙古人将汉族视为第三、第四民族横征暴敛、烧杀奸劫,满人强制汉族剃发留辫,“留发不留头,留头不留发”,发人深指的“扬州十日、嘉定三屠”,满族旗人不事生产,全部靠剥削汉族来生活。历史不能忘记,切不可以德报怨。
    古今中外的史实告诫我们,只有强力、强大、强盛的民族自觉,对于各个少数民族一视同仁,全面平等,才会换得全国社会生活的长治久安。
    之前的一位用阿拉伯文发言的网民,用事实说明了乌鲁木齐维吾尔人暴乱的真相。
    天理昭彰,什么时候让两千年前西汉大将军陈汤、甘延寿说过的豪言:“犯我强汉者,虽远必洙!”,能够在现在仍然高亢地发出,那么,就是全国平安、社会升平的时候。

  3. 清醒觉醒说道:

    新疆乌鲁木齐事件的点滴看法
    就是,事实证明中国政府在1979年之后的民族政策是荒唐的、失败的、不得民心的。一味地偏袒少数民族,对少数民族忍让、屈从,从各方面(高考、就业、提拔、生育)优待少数民族,广大汉族成为憨厚、低下、隐忍的民族。
    广大民众强烈要求中国各民族平等、对等,对少数民族的无原则的退让、克制、偏向,只会助长它们的嚣张气焰,只会是得寸进尺,肆无忌惮,甚至是变本加厉。
    到头来,那些永远也驯化不了的野兽民族,还会攻击软弱的政府,更为痛惜的是,广大汉族老百姓是最大、最终的受害者。
    历史上,少数民族当政,如蒙元、满清时期,都是对汉族采取屠杀、虐待、歧视的态度,蒙古人将汉族视为第三、第四民族横征暴敛、烧杀奸劫,满人强制汉族剃发留辫,“留发不留头,留头不留发”,发人深指的“扬州十日、嘉定三屠”,满族旗人不事生产,全部靠剥削汉族来生活。历史不能忘记,切不可以德报怨。

发表评论

电子邮件地址不会被公开。 必填项已用*标注