Javascript 数组系列二

/**
* Array 常用方法
*/

join() 方法将一个数组(或一个类数组对象)的所有元素连接成一个字符串并返回这个字符串。

var a = ['Wind', 'Rain', 'Fire'];
var str1 = a.join(); // Wind,Rain,Fire; 默认','
var str2 = a.join(''); // WindRainFire;
var str3 = a.join(', ');
var str4 = a.join('-'); // Wind-Rain-Fire;a

// join Polyfill

// if (!Array.prototype.join) {
//   Array.prototype.join = function(item) {
//     if (!item) return;
//     return this.toString().replace(/,/g, item);
//   }
// }

slice(start,end); 方法返回一个从开始到结束(不包括结束)选择的数组的一部分浅拷贝到一个新数组对象。原始数组不会被修改。

/**
* start: 可选
* 从该处开始提取原数组中的元素(从0开始)如果该参数为负数,
* 则表示从原数组中的倒数第几个元素开始提取,slice(-2)表示提取
* 原数组中的倒数第二个元素到最后一个元素(包含最后一个元素)。
* 如果省略 begin,则 slice 从索引 0 开始。
*
* end: 可选
* 在该处结束提取原数组元素(从0开始),slice会提取原数组索引从start-end所有元素(包含start,不包含end)。
* slice(1,4) 提取原数组中的第二个元素开始直到第四个元素的所有元素 (索引为 1, 2, 3的元素)。
* 如果该参数为负数, 则它表示在原数组中的倒数第几个元素结束抽取。
* slice(-2,-1)表示抽取了原数组中的倒数第二个元素到最后一个元素(不包含最后一个元素,也就是只有倒数第二个元素)。
*
* 如果 end 被省略,则slice 会一直提取到原数组末尾。
* 如果 end 大于数组长度,slice 也会一直提取到原数组末尾。
*/

var animals = ['ant', 'bison', 'camel', 'duck', 'elephant'];
console.log(animals.slice(2)); // ['camel', 'duck', 'elephant'];
console.log(animals.slice(2, 4)); // ['camel', 'duck'];
console.log(animals.slice(1, 5)); // ['bison', 'camel', 'duck', 'elephant'];
console.log(animals.slice(-2));// ['duck', 'elephant'];
console.log(animals.slice(-2, -1)); //['duck']

// Polyfill

(function() {
  'use strict';
  var _slice = Array.prototype.slice;

  try {
    _slice.call(document.documentElement);
  } catch(e) {
    Array.prototype.slice = function (begin, end) {
      end = (typeof end !== 'undefined') ? end : this.length;

      // 数组
      if (Object.prototype.toString.call(this) === '[object Array]') {
        return _slice.call(this, begin, end);
      }

      // 类数组

      var i, cloned = [], size, len = this.length;

      // begin 值为负数
      var start = begin || 0;
      start = (start >= 0) ? start : Math.max(0, len + start); // start的负值不能大于len值

      // end 为负数
      var upTo = (typeof end === 'number') ? Math.min(end, len) : len;
      if (end < 0) {
        upTo = len + end;
      }

      // slice 获取实际的个数
      size = upTo - start;

      if (size > 0) {
        cloned = new Array(size);
        if (this.charAt) {
          for (i = 0; i < size; i++) {
            cloned[i] = this.charAt(start + i);
          }
        } else {
          for (i = 0; i < size; i++) {
            cloned[i] = this[start + i];
          }
        }
      }

      return cloned;
    }
  }
}());

concat() 方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。

var alpha = ['a', 'b', 'c'];
var numeric = [1, 2, 3];

alpha.concat(numeric); // ["a", "b", "c", 1, 2, 3]

var num1 = [1, 2, 3],
    num2 = [4, 5, 6],
    num3 = [7, 8, 9];

var nums = num1.concat(num2, num3); // [1, 2, 3, 4, 5, 6, 7, 8, 9]

var alpha = ['a', 'b', 'c'];

var alphaNumeric = alpha.concat(1, [2, 3]); // ['a', 'b', 'c', 1, 2, 3]

reverse() 方法将数组中元素的位置颠倒。

var myArray = ['one', 'two', 'three'];
myArray.reverse();  // ['three', 'two', 'one'];

但是当数组索引不是连续或以0开始,那就要注意了

var a = new Array();
a[2] = 2;
a[4] = 4;
a[6] = 6;
console.log(a); 
// 2:2
// 4:4
// 6:6

a.reverse();

console.log(a);

// 0:6
// 2:4
// 4:2

MDN Array系列

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值