JS数组操作

1.栈方法:push方法可向数组的末尾添加一个或多个元素,并返回新的长度,pop方法删除数组最后一个,并返回删除的值  

var a=new Array(1,2,3);
a.push(4);
console.log(a);//[1, 2, 3, 4]
console.log(a.length);//4
console.log(a.pop());//4
console.log(a); //[1, 2, 3]
console.log(a.length);//3

 

2.队列方法:shift方法用于把数组的第一个元素从其中删除,并返回第一个元素的值,并使后面元素index都减一,length也减一,unshift方法,可向数组的开头添加一个或更多元素,并返回新的长度

 

var arr = [1,2,3,4,5];

 

var b = arr.shift();
alert(arr.length + " ====== " + arr + "=======>" + b);//4=====2,3,4,5======1

 

arr.unshift(-1);
alert(arr.length + " ====== " + arr);//5=====-1,2,3,4,5

 

3.重排序方法:数组中已经存在两个重新排序的方法,reverse()和sort(),其中reverse()仅仅用来反转数组顺序

var a = [1,8,9,12,21,2];
a.reverse();
alert(a); //[2,21,12,9,8,1];

 

但是这个样子,比较排序数字就不是很好了,但是sort方法可以接收一个比较函数当作参数,以便指定哪个值位于哪个值前面。这个函数很简单,有两个参数,如果第一个参数位于第二个参数之前。返回负数,如果相等,返回0。反之,则返回正数:
function compare(value1,value2){
if(value1 < value2){
return -1;
}else if(value1 > value2){
return 1;
}else{
return 0;
}
}

当然也可以非常简单的写成这个样子:

function compare(value1,value2){
return value1 - value2;
}

只要将这个函数传递给sort即可:
var values = [0, 1, 5, 10, 15];
values.sort(compare);
alert(values); //0,1,5,10,15

当然,如果要降序排列的话,改变一下负数和正数的方向即可


function compare(value1,value2){
if(value1 < value2){
return 1;
}else if(value1 > value2){
return -1;
}else{
return 0;
}
}

4.操作方法:_concat()方法用于拼接数组,a.concat(b)返回一个a和b共同组成的新数组(a,b均为数组),__slice()__根据传入参数,返回当前数组中的一个或者多个项创建一个新数组,__slice()方法不会影响原数组__,slice()方法可以接收一个或两个参数,即数组的开始和结束位置

var colors = ["red", "green", "blue"];
var colors2 = colors.concat("yellow", ["black", "brown"]);
alert(colors); //red,green,blue
alert(colors2); //red,green,blue,yellow,black,brown

 

var colors = ["red", "green", "blue", "yellow", "purple"];
var colors2 = colors.slice(1);
var colors3 = colors.slice(1,4);
alert(colors2); //green,blue,yellow,purple
alert(colors3); //green,blue,yellow

 

 

5.splice方法:只有第一个参数是从数组左边开始截取几个,第二个参数是删除第一个参数数字后面的几位,后面的是依次添加在后面的

var arr = [1,2,3,4,5];

arr.splice(1,1,'red','blue');
alert(arr);//1,red,blue,3,4,5

 

6. 位置方法:__indexOf()和lastIndexOf()__,这两个方法都接收两个参数:要查找的项和表示要查找位置的索引(可选),区别只是一个从开头开始找,一个从尾部开始找。

var numbers = [1,2,3,4,5,4,3,2,1];
alert(numbers.indexOf(4)); //3
alert(numbers.lastIndexOf(4)); //5
alert(numbers.indexOf(4, 4)); //5
alert(numbers.lastIndexOf(4, 4)); //3
var person = { name: "Nicholas" };
var people = [{ name: "Nicholas" }];
var morePeople = [person];
alert(people.indexOf(person)); //-1
alert(morePeople.indexOf(person)); //0

 

 

7.迭代方法

var arr = [8,2,10,5,6,7];

var sum = 0;

//相当于for循环,该方法没有返回值
arr.forEach(function(item,index,a){
if(index % 2 == 0){
sum += item;
}

});
alert(sum);  //24


var flag = arr.some(function(item,index,a){
if(item > 9){
return true;
}
});

alert(flag);  //ture

 

//过滤

var newArr = arr.filter(function(item,index,a){
return item > 3;
});

alert(newArr);

 

//操作

var newArr = arr.map(function(item,index,a){
return item*3;
});


alert(newArr);

 

//把逗号改成-

var arr = [2,3,4556,56,767,67,78];

var str = arr.join('-');

alert(str);

 

 

ECMAScript5为数组定义了5个迭代方法。每个方法都接受两个参数,第一个是进行迭代的函数,第二个是该函数的作用域对象【可选】。

进行迭代的函数接受三个参数,第一个是数组中要进行迭代的元素的值,第二个是数组候总要进行迭代的元素的位置,第三个是迭代数组本身。
1. every()对数组中的每一项运行给定的函数,如果该函数对每一项都返回true,则返回true。
2. filter() 对数组中的每一项运行给定的函数,返回该函数返回true的项组成的数组。
3. forEach() 对数组中的每一项运行给定的函数,这个方法没有返回值
4. map() 对数组中的每一项运行给定的函数,返回每次函数调用的结果组成的数组
5. some()对数组中的每一项运行给定的函数,如果该函数对任意一项返回true,则返回true。
使用起来非常的简单方便,直接看下例子:
```javascript
var num = [1,2,3,4,5,6,7,8,9];
var everyResult = num.every(function(item, index, array) {
if(item > 2) {
return true;
}
});
alert(everyResult);

var someResult = num.some(function(item) {
if(item > 2) {
return true;
}
});
alert(someResult);

var filterResult = num.filter(function(item) {
if(item > 2) {
return true;
}
});
alert(filterResult);

var mapResult = num.map(function(item) {
if(item > 2) {
return true;
}
});
alert(mapResult);

var forEachResult = num.forEach(function(item) {
if(item > 2) {
return true;
}
});
alert(forEachResult);
```

 

posted @ 2014-11-13 22:18  天外小龙虾  阅读(159)  评论(0编辑  收藏  举报