html5中文学习网

您的位置: 首页 > 网站及特效实例 > javascript特效 » 正文

JavaScript数组常用操作技巧汇总_javascript技巧_

[ ] 已经帮助:人解决问题

本文实例汇总了JavaScript数组的常用操作技巧。分享给大家供大家参考。具体如下:pvfHTML5中文学习网 - HTML5先行者学习网

前言pvfHTML5中文学习网 - HTML5先行者学习网

相信大家都用惯了jquery或者underscore等这些类库中常用的数组相关的操作,如$.isArray,_.some,_.find等等方法。这里无非是对原生js的数组操作多了一些包装。pvfHTML5中文学习网 - HTML5先行者学习网
这里主要汇总一下JavaScript数组操作的常用API。相信对大家解决程序问题很有帮助。pvfHTML5中文学习网 - HTML5先行者学习网

一、性质pvfHTML5中文学习网 - HTML5先行者学习网
JavaScript中的数组是一种特殊的对象,用来表示偏移量的索引是该对象的属性,索引可能是整数。然而,这些数字索引在内部被转换为字符串类型,这是因为JavaScript对象中的属性名必须是字符串。pvfHTML5中文学习网 - HTML5先行者学习网

二、操作pvfHTML5中文学习网 - HTML5先行者学习网

1 判断数组类型pvfHTML5中文学习网 - HTML5先行者学习网

复制代码 代码如下:
var array0 = [];    // 字面量pvfHTML5中文学习网 - HTML5先行者学习网
var array1 = new Array();   // 构造器pvfHTML5中文学习网 - HTML5先行者学习网
// 注意:在IE6/7/8下是不支持Array.isArray方法的pvfHTML5中文学习网 - HTML5先行者学习网
alert(Array.isArray(array0));pvfHTML5中文学习网 - HTML5先行者学习网
// 考虑兼容性,可使用pvfHTML5中文学习网 - HTML5先行者学习网
alert(array1 instanceof Array);pvfHTML5中文学习网 - HTML5先行者学习网
// 或者pvfHTML5中文学习网 - HTML5先行者学习网
alert(Object.prototype.toString.call(array1) === '[object Array]');
pvfHTML5中文学习网 - HTML5先行者学习网

2 数组与字符串pvfHTML5中文学习网 - HTML5先行者学习网

非常简单:由数组转换为字符串,使用join;由字符串转换为数组,使用split。pvfHTML5中文学习网 - HTML5先行者学习网

复制代码 代码如下:
// join - 由数组转换为字符串,使用joinpvfHTML5中文学习网 - HTML5先行者学习网
console.log(['Hello', 'World'].join(','));    // Hello,WorldpvfHTML5中文学习网 - HTML5先行者学习网
// split - 由字符串转换为数组,使用splitpvfHTML5中文学习网 - HTML5先行者学习网
console.log('Hello World'.split(' '));    // ["Hello", "World"]
pvfHTML5中文学习网 - HTML5先行者学习网

3 查找元素pvfHTML5中文学习网 - HTML5先行者学习网

相信大家都常用字符串类型indexOf,却很少知道数组的indexOf同样可以用于查找元素。pvfHTML5中文学习网 - HTML5先行者学习网

复制代码 代码如下:
// indexOf - 查找元素pvfHTML5中文学习网 - HTML5先行者学习网
console.log(['abc', 'bcd', 'cde'].indexOf('bcd'));  // 1pvfHTML5中文学习网 - HTML5先行者学习网

// pvfHTML5中文学习网 - HTML5先行者学习网
var objInArray = [pvfHTML5中文学习网 - HTML5先行者学习网
    {pvfHTML5中文学习网 - HTML5先行者学习网
        name: 'king',pvfHTML5中文学习网 - HTML5先行者学习网
        pass: '123'pvfHTML5中文学习网 - HTML5先行者学习网
    },pvfHTML5中文学习网 - HTML5先行者学习网
    {pvfHTML5中文学习网 - HTML5先行者学习网
        name: 'king1',pvfHTML5中文学习网 - HTML5先行者学习网
        pass: '234'pvfHTML5中文学习网 - HTML5先行者学习网
    }pvfHTML5中文学习网 - HTML5先行者学习网
];pvfHTML5中文学习网 - HTML5先行者学习网

console.log(objInArray.indexOf({pvfHTML5中文学习网 - HTML5先行者学习网
    name: 'king',pvfHTML5中文学习网 - HTML5先行者学习网
    pass: '123'pvfHTML5中文学习网 - HTML5先行者学习网
}));    // -1pvfHTML5中文学习网 - HTML5先行者学习网

var elementOfArray = objInArray[0];pvfHTML5中文学习网 - HTML5先行者学习网
console.log(objInArray.indexOf(elementOfArray));    // 0

pvfHTML5中文学习网 - HTML5先行者学习网

从以上可以看出,对于数组包含对象的这种数组,indexOf方法并非是经过深度比较来得到对应的查找结果,仅仅是比较对应元素的引用。pvfHTML5中文学习网 - HTML5先行者学习网

4 数组连接pvfHTML5中文学习网 - HTML5先行者学习网

使用concat,要注意,使用concat之后会生成一个新的数组。pvfHTML5中文学习网 - HTML5先行者学习网

复制代码 代码如下:
var array1 = [1, 2, 3];pvfHTML5中文学习网 - HTML5先行者学习网
var array2 = [4, 5, 6];pvfHTML5中文学习网 - HTML5先行者学习网
var array3 = array1.concat(array2); // 实现数组连接之后,会创建出新的数组pvfHTML5中文学习网 - HTML5先行者学习网
console.log(array3);
pvfHTML5中文学习网 - HTML5先行者学习网
5 类列表操作pvfHTML5中文学习网 - HTML5先行者学习网

用于添加元素,可分别使用push和unshift,移除元素可分别使用pop和shift。pvfHTML5中文学习网 - HTML5先行者学习网

复制代码 代码如下:
// push/pop/shift/unshiftpvfHTML5中文学习网 - HTML5先行者学习网
var array = [2, 3, 4, 5];pvfHTML5中文学习网 - HTML5先行者学习网

// 添加到数组尾部pvfHTML5中文学习网 - HTML5先行者学习网
array.push(6);pvfHTML5中文学习网 - HTML5先行者学习网
console.log(array); // [2, 3, 4, 5, 6]pvfHTML5中文学习网 - HTML5先行者学习网

// 添加到数组头部pvfHTML5中文学习网 - HTML5先行者学习网
array.unshift(1);pvfHTML5中文学习网 - HTML5先行者学习网
console.log(array); // [1, 2, 3, 4, 5, 6]pvfHTML5中文学习网 - HTML5先行者学习网

// 移除最后一个元素pvfHTML5中文学习网 - HTML5先行者学习网
var elementOfPop = array.pop();pvfHTML5中文学习网 - HTML5先行者学习网
console.log(elementOfPop);   // 6pvfHTML5中文学习网 - HTML5先行者学习网
console.log(array); // [1, 2, 3, 4, 5]pvfHTML5中文学习网 - HTML5先行者学习网

// 移除第一个元素pvfHTML5中文学习网 - HTML5先行者学习网
var elementOfShift = array.shift();pvfHTML5中文学习网 - HTML5先行者学习网
console.log(elementOfShift);   // 1pvfHTML5中文学习网 - HTML5先行者学习网
console.log(array); // [2, 3, 4, 5]

pvfHTML5中文学习网 - HTML5先行者学习网

6 splice方法pvfHTML5中文学习网 - HTML5先行者学习网

主要两个用途:pvfHTML5中文学习网 - HTML5先行者学习网
① 从数组中间位置添加和删除元素pvfHTML5中文学习网 - HTML5先行者学习网
② 从原有数组中,获取一个新数组pvfHTML5中文学习网 - HTML5先行者学习网

当然,两个用途是一气合成的,有些场景注重用途一,有些则注重用途二。pvfHTML5中文学习网 - HTML5先行者学习网

从数组中间位置添加和删除元素,splice方法为数组添加元素,需提供如下参数pvfHTML5中文学习网 - HTML5先行者学习网
① 起始索引(也就是你希望开始添加元素的地方)pvfHTML5中文学习网 - HTML5先行者学习网
② 需要删除的元素的个数或者是提取的元素的个数(添加元素时该参数设置为0)pvfHTML5中文学习网 - HTML5先行者学习网
③ 想要添加进数组的元素pvfHTML5中文学习网 - HTML5先行者学习网

复制代码 代码如下:
var nums = [1, 2, 3, 7, 8, 9];pvfHTML5中文学习网 - HTML5先行者学习网
nums.splice(3, 0, 4, 5, 6);pvfHTML5中文学习网 - HTML5先行者学习网
console.log(nums);  // [1, 2, 3, 4, 5, 6, 7, 8, 9] pvfHTML5中文学习网 - HTML5先行者学习网
// 紧接着做删除操作或者提取新的数组pvfHTML5中文学习网 - HTML5先行者学习网
var newnums = nums.splice(3, 4);pvfHTML5中文学习网 - HTML5先行者学习网
console.log(nums);  // [1, 2, 3, 8, 9]pvfHTML5中文学习网 - HTML5先行者学习网
console.log(newnums);   // [4, 5, 6, 7]
pvfHTML5中文学习网 - HTML5先行者学习网

7 排序pvfHTML5中文学习网 - HTML5先行者学习网

主要介绍reverse和sort两个方法。数组反转使用reverse,sort方法不仅可以用于简单排序,也可以用于复杂排序。pvfHTML5中文学习网 - HTML5先行者学习网

复制代码 代码如下:
// 反转数组pvfHTML5中文学习网 - HTML5先行者学习网
var array = [1, 2, 3, 4, 5];pvfHTML5中文学习网 - HTML5先行者学习网
array.reverse();pvfHTML5中文学习网 - HTML5先行者学习网
console.log(array); // [5, 4, 3, 2, 1]pvfHTML5中文学习网 - HTML5先行者学习网
我们先对字符串元素的数组进行排序pvfHTML5中文学习网 - HTML5先行者学习网
var arrayOfNames = ["David", "Mike", "Cynthia", "Clayton", "Bryan", "Raymond"];pvfHTML5中文学习网 - HTML5先行者学习网
arrayOfNames.sort();pvfHTML5中文学习网 - HTML5先行者学习网
console.log(arrayOfNames);  // ["Bryan", "Clayton", "Cynthia", "David", "Mike", "Raymond"]
pvfHTML5中文学习网 - HTML5先行者学习网
我们对数字元素的数组进行排序pvfHTML5中文学习网 - HTML5先行者学习网
复制代码 代码如下:
// 如果数组元素时数字类型,sort()方法的排序结果就不能让人满意了pvfHTML5中文学习网 - HTML5先行者学习网
var nums = [3, 1, 2, 100, 4, 200];pvfHTML5中文学习网 - HTML5先行者学习网
nums.sort();pvfHTML5中文学习网 - HTML5先行者学习网
console.log(nums);  // [1, 100, 2, 200, 3, 4]
pvfHTML5中文学习网 - HTML5先行者学习网
sort方法是按照字典顺序对元素进行排序的,因此它假定元素都是字符串类型,因此,即使元素是数字类型,也被认为是字符串类型。这时,可以在调用方法时传入一个大小比较函数,排序时,sort()方法将会根据该函数比较数组中两个元素的大小,从而决定整个数组的顺序。pvfHTML5中文学习网 - HTML5先行者学习网
复制代码 代码如下:
var compare = function(num1, num2) {pvfHTML5中文学习网 - HTML5先行者学习网
    return num1 > num2;pvfHTML5中文学习网 - HTML5先行者学习网
};pvfHTML5中文学习网 - HTML5先行者学习网
nums.sort(compare);pvfHTML5中文学习网 - HTML5先行者学习网
console.log(nums);  // [1, 2, 3, 4, 100, 200]pvfHTML5中文学习网 - HTML5先行者学习网

var objInArray = [pvfHTML5中文学习网 - HTML5先行者学习网
    {pvfHTML5中文学习网 - HTML5先行者学习网
        name: 'king',pvfHTML5中文学习网 - HTML5先行者学习网
        pass: '123',pvfHTML5中文学习网 - HTML5先行者学习网
        index: 2pvfHTML5中文学习网 - HTML5先行者学习网
    },pvfHTML5中文学习网 - HTML5先行者学习网
    {pvfHTML5中文学习网 - HTML5先行者学习网
        name: 'king1',pvfHTML5中文学习网 - HTML5先行者学习网
        pass: '234',pvfHTML5中文学习网 - HTML5先行者学习网
        index: 1pvfHTML5中文学习网 - HTML5先行者学习网
    }pvfHTML5中文学习网 - HTML5先行者学习网
];pvfHTML5中文学习网 - HTML5先行者学习网
// 对数组中的对象元素,根据index进行升序pvfHTML5中文学习网 - HTML5先行者学习网
var compare = function(o1, o2) {pvfHTML5中文学习网 - HTML5先行者学习网
    return o1.index > o2.index;pvfHTML5中文学习网 - HTML5先行者学习网
};pvfHTML5中文学习网 - HTML5先行者学习网
objInArray.sort(compare);pvfHTML5中文学习网 - HTML5先行者学习网
console.log(objInArray[0].index < objInArray[1].index); // true

pvfHTML5中文学习网 - HTML5先行者学习网

8 迭代器方法pvfHTML5中文学习网 - HTML5先行者学习网

主要包含forEach和every、some和map、filterpvfHTML5中文学习网 - HTML5先行者学习网
forEach相信大家都会,主要介绍一下其他四种方法。pvfHTML5中文学习网 - HTML5先行者学习网
every方法接受一个返回值为布尔类型的函数,对数组中的每个元素使用该函数。如果对于所有的元素,该函数均返回true,则该方法返回true。pvfHTML5中文学习网 - HTML5先行者学习网

复制代码 代码如下:
var nums = [2, 4, 6, 8];pvfHTML5中文学习网 - HTML5先行者学习网
// 不生成新数组的迭代器方法pvfHTML5中文学习网 - HTML5先行者学习网
var isEven = function(num) {pvfHTML5中文学习网 - HTML5先行者学习网
    return num % 2 === 0;pvfHTML5中文学习网 - HTML5先行者学习网
};pvfHTML5中文学习网 - HTML5先行者学习网
// 如果都是偶数,才返回truepvfHTML5中文学习网 - HTML5先行者学习网
console.log(nums.every(isEven)); // truepvfHTML5中文学习网 - HTML5先行者学习网

some方法也接受一个返回值为布尔类型的函数,只要有一个元素使得该函数返回true,该方法就返回true。pvfHTML5中文学习网 - HTML5先行者学习网
var isEven = function(num) {pvfHTML5中文学习网 - HTML5先行者学习网
    return num % 2 === 0;pvfHTML5中文学习网 - HTML5先行者学习网
};pvfHTML5中文学习网 - HTML5先行者学习网
var nums1 = [1, 2, 3, 4];pvfHTML5中文学习网 - HTML5先行者学习网
console.log(nums1.some(isEven)); // true

pvfHTML5中文学习网 - HTML5先行者学习网

map和filter这两个方法都可以产生新数组,map返回的新数组是对原有元素应用某个函数得到的结果。如:pvfHTML5中文学习网 - HTML5先行者学习网

复制代码 代码如下:
var up = function(grade) {pvfHTML5中文学习网 - HTML5先行者学习网
    return grade += 5;pvfHTML5中文学习网 - HTML5先行者学习网
}pvfHTML5中文学习网 - HTML5先行者学习网
var grades = [72, 65, 81, 92, 85];pvfHTML5中文学习网 - HTML5先行者学习网
var newGrades = grades.ma
pvfHTML5中文学习网 - HTML5先行者学习网
filter方法和every方法很类似,传入一个返回值为布尔类型的函数。和every()方法不同的是,当对数组中的所有元素应用该函数,结果均为true时,该方法并不返回true,而是返回一个新数组,该数组包含应用该函数后结果为true的元素。pvfHTML5中文学习网 - HTML5先行者学习网
复制代码 代码如下:
var isEven = function(num) {pvfHTML5中文学习网 - HTML5先行者学习网
    return num % 2 === 0;pvfHTML5中文学习网 - HTML5先行者学习网
};pvfHTML5中文学习网 - HTML5先行者学习网
var isOdd = function(num) {pvfHTML5中文学习网 - HTML5先行者学习网
    return num % 2 !== 0;pvfHTML5中文学习网 - HTML5先行者学习网
};pvfHTML5中文学习网 - HTML5先行者学习网
var nums = [];pvfHTML5中文学习网 - HTML5先行者学习网
for (var i = 0; i < 20; i++) {pvfHTML5中文学习网 - HTML5先行者学习网
    nums[i] = i + 1;pvfHTML5中文学习网 - HTML5先行者学习网
}pvfHTML5中文学习网 - HTML5先行者学习网
var evens = nums.filter(isEven);pvfHTML5中文学习网 - HTML5先行者学习网
console.log(evens); // [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] pvfHTML5中文学习网 - HTML5先行者学习网
var odds = nums.filter(isOdd);pvfHTML5中文学习网 - HTML5先行者学习网
console.log(odds);  // [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
pvfHTML5中文学习网 - HTML5先行者学习网

三、总结pvfHTML5中文学习网 - HTML5先行者学习网

以上还存在某些方法在低级浏览器不支持的问题,还需要再采用其他方法进行兼容实现。pvfHTML5中文学习网 - HTML5先行者学习网

这些都是常见的可能大家不太容易想到的方法。大家不妨多留意一下。pvfHTML5中文学习网 - HTML5先行者学习网

希望本文所述对大家的javascript程序设计有所帮助。pvfHTML5中文学习网 - HTML5先行者学习网

(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助