JS数组

1.数组的创建

var arr = new Array();

var arr = new Array(size);  //[empty × 3] 创建的数组 为empty,在其上做操作时,还是empty,访问时是undefined,但+1之后还是empty

var arr = Array(size);  //创建的数组 为empty,在其上做操作时,还是empty,访问时是undefined,但+1之后还是empty 

var arr = Array.apply(null,Array(3));  // [undefined, undefined, undefined]  +1之后是NaN

var arr = new Array(a,b,c);  //数组中单个元素

笔试、面试出现的

图1

图2

图3

你认为Array的原型是一个对象吗? 是,但是是个数组

Array.isArray(Array.prototype)的结果? True

图4

笔试题 易错

2.数组的访问

arr[1]  //访问第二个元素

3.数组元素的添加

arr.push(it1,...itn);  //将1个或多个元素添加到数组末尾,返回数组长度

arr.unshift(it1,...itn);  //将1个或多个元素添加到数组开头,其余元素自动后移,返回数组长度

arr.splice(index,0,添加的元素);  //从指定index位置添加元素,返回[],(其实是返回删除的元素组成的数组)

4.数组元素的删除

arr.pop(); //移除最后一个元素,并返回该元素

arr.shift(); //移除第一个元素,并返回该元素

arr.splice(index,num);  //删除从index位置开始的num个元素,并返回被移除元素组成的数组

5.数组的截取和合并 (不会改变原数组的两个方法)

arr.slice(start,end);  //返回[start,end)区间的数组。end缺省时,start到最后。若start或end为负数时,相当于倒数第几个。end<start时,返回空数组。

arr.concat(); //创建并返回一个新数组,元素包括调用的原始数组的元素和所有参数。(参数里面的一层数组会打开,里面的数组不打开)

6.数组的拷贝 (都是浅拷贝)

arr.slice(0);  //返回数组的拷贝数组

arr.concat(); 

7.数组的排序

arr.reverse();  //反转数组,返回数组地址

arr.sort(); //对数组进行排序,返回数组地址  (无参数时 按字母表进行排序。否则 传个函数做参数)

类数组转数组

Array.from() :从一个类似数组或可迭代对象中创建一个新的数组实例。

const bar = ["a", "b", "c"];
Array.from(bar);
// ["a", "b", "c"]

Array.from('foo');
// ["f", "o", "o"]


Array.from(new Array(size),val=>0);  //初始化为0

//展开运算符
[..."foo"]  //["f","o","o"]  

Array.prototype.slice.call(arguments);

数组的基本方法与代码演示

push():从后加

pop():从后出

push():从后加

shift():从头出

unshift():从头加

pop():从后出

迭代方法 every()、some() filter() map() reduce()

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

var everyResult = numbers.every(function(item, index, array){
return (item > 2);
});

alert(everyResult);       //false

var someResult = numbers.some(function(item, index, array){
return (item > 2);
});

alert(someResult);       //true
var numbers = [1,2,3,4,5,4,3,2,1];

var filterResult = numbers.filter(function(item, index, array){
return (item > 2);
});

alert(filterResult);   //[3,4,5,4,3]
var numbers = [1,2,3,4,5,4,3,2,1];

var mapResult = numbers.map(function(item, index, array){
return item * 2;
});

alert(mapResult);   //[2,4,6,8,10,8,6,4,2]

var values = [1,2,3,4,5];
var sum = values.reduce(function(prev, cur, index, array){
return prev + cur;
});
alert(sum);  //15

function appendCurrent (previousValue, currentValue) {
return previousValue + "::" + currentValue;
}

var elements = ["abc", "def", 123, 456];

var result = elements.reduce(appendCurrent);

document.write(result);

// Output   abc::def::123::456

位置方法 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

/*morePeople 是一个数组,他的第一个对象为 person 所以能找到,
people也是一个数组,他的第一个对象没名字,所以用person找不到,比较的是地址,不是内部*/

默认调用toString()

var person1 = {
toLocaleString : function () {
return "Nikolaos";
},

toString : function() {
return "Nicholas";
}
};

var person2 = {
toLocaleString : function () {
return "Grigorios";
},

toString : function() {
return "Greg";
}
};

var people = [person1, person2];
alert(people);                      //Nicholas,Greg
alert(people.toString());           //Nicholas,Greg
alert(people.toLocaleString());     //Nikolaos,Grigorios

重排序方法 reverse() sort()

var values = [1, 2, 3, 4, 5];
values.reverse();
alert(values);       //5,4,3,2,1    
var values = [0, 1, 5, 10, 15];
values.sort();
alert(values);    //0,1,10,15,5
function compare(value1, value2) {
    if (value1 < value2) {
        return -1;
    } else if (value1 > value2) {
        return 1;
    } else {
        return 0;
    }
}

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;
    }
}

var values = [0, 1, 5, 10, 15];
values.sort(compare);
alert(values);    //15,10,5,1,0

slice splice

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


var colors = ["red", "green", "blue"];
var removed = colors.splice(0,1);              //remove the first item
alert(colors);     //green,blue
alert(removed);    //red - one item array

removed = colors.splice(1, 0, "yellow", "orange");  //insert two items at position 1
alert(colors);     //green,yellow,orange,blue
alert(removed);    //empty array

removed = colors.splice(1, 1, "red", "purple");    //insert two values, remove one
alert(colors);     //green,red,purple,orange,blue
alert(removed);    //yellow - one item array
Table of Contents