[关闭]
@Dale-Lin 2019-03-23T23:27:08.000000Z 字数 5146 阅读 894

JS Array

JavaScript


声明数组的方法有两种:


在读取和设置数组的值时,使用方括号和基于0的数字索引:

        var  colors = ['red','blue'];
        alert(colors[0]);                //red
        var colors[1] = 'black';             //把第二项改为 black
        var colors[2] = 'green';             //新增数组第三个位置,并赋字符串 green

数组的项数保存在其 length属性 中:

        var colors = ['red','blue'];
        var names = [];
        document.write(color.length);   //2
        document.write(names.length);   //0

可以通过设置 length属性 来改变数组的长度。或在数组后新增一个位置;或除去数组最后一个位置的元素:

        var colors = ['red','blue','green'];
        colors.length = 2;
        alert(colors[3]);   //undefined

        var colors = ['red','blue','green'];
        colors[99] = 'black';
        alert(colors.length);   //100,中间未声明的均为undefined

检测数组:

使用 Array.isArray() 方法

        if (Array.isArray(colors)){
            //对数组进行某些操作
        }

转换方法:

每个对象都具有 toLoacleString()、toString()、valueOf() 方法。

两种转化成字符串的方法调用的函数不同

使用 join() 方法可以使用不同的符号来构建转化后的字符串:

        var color = ['red','green','black'];
        alert(color.join('||'));    //使用 || 来分隔
        alert(color.join('/'));     //使用 /  来分隔

如果不传入带引号的 join() 方法参数,则默认以逗号分隔


栈方法:

队列方法:

结合 push() 方法和 shift() 方法,就能像操作队列一样操作数组(前出后进)


重排序方法(都会改变原数组):


操作方法:

参数可以不止一个数组。


位置方法:

下列两个方法都接收两个参数:要查找的项和(可选的)表示查找起点的索引(也会被查找)。并且都返回查找结果在数组中的索引值,在没找到的情况下返回 -1 在比较第一个参数(查找项)和数组中的每一项时,会使用全等操作符。


迭代方法:

  1. var numbers = [1,2,3,4,5,4,3,2,1];
  2. /* every() */
  3. var everyResult = numbers.every(function(item,index,array){
  4. return (item > 2);
  5. });
  6. alert(everyResult); //false
  7. /* some() */
  8. var someResult = numbers.some(function(item,index,array){
  9. return (item > 2);
  10. });
  11. alert(someResult); //true
  12. /* filter() */
  13. var filterResult = numbers.filter(function(item,index,array){
  14. return (item > 2);
  15. });
  16. alert(filterResult); //[3,4,5,4,3]
  17. /* map() */
  18. var mapResult = numbers.map(function(item,index,array){
  19. return (item*2);
  20. });
  21. alert(mapResult);

归并方法:

下列两个方法都接收两个参数——在每一项上调用的函数和(可选的)作为归并基础的初始值。
所调用的函数包含 callback(acc,cur,index,array) 四个参数和默认为0的 initialValue,表示 累计值、当前值、索引值、数组、第一个值传入时的 acc ,返回 acc。

而且,这个函数每次返回的值都会更新 acc(累计值) 传递给下一次执行。

利用 indexOf() 和递归方法结合,可以实现对数组的 去重 等操作。


Array.prototype.flat(depth = 1)

将指定深度的嵌套数组连接,会将处理到的空项移除:

  1. var arr1 = [1, 2, [3, 4, , [5, 6]]];
  2. arr1.flat(); // [1,2,3,4,[5,6]]
  3. arr1.flat(2); // [1,2,3,4,5,6]

快速排序

  1. //quick sort
  2. function quickSort(arr, left, right){
  3. if (left === right || arr.length === 0) return arr;
  4. var book = arr[0], i = left, j = right;
  5. while (i !== j){
  6. while (arr[j] >= book && j > i){
  7. j--;
  8. }
  9. while (arr[i] <= book && i < j){
  10. i++;
  11. }
  12. if (i !== j){
  13. var t = arr[i];
  14. arr[i] = arr[j];
  15. arr[j] = t;
  16. }
  17. }
  18. if (i !== 0){
  19. arr[0] = arr[i];
  20. arr[i] = book;
  21. return quickSort(arr.slice(0, i), 0, i-1).concat(arr[i], quickSort(arr.slice(i+1), 0, arr.length-i-2));
  22. } else {
  23. return arr.slice(0, 1).concat(quickSort(arr.slice(i+1), 0, arr.length-2));
  24. }
  25. }
  26. var a = [1,5,3,4,7,4,6,8,2,4,8,9,0];
  27. quickSort(a, 0, a.length-1); //[0, 1, 2, 3, 4, 4, 4, 5, 6, 7, 8, 8, 9]

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注