//数组中常用方法
//控制台输入 console.dir(Array.prototype)可在Array这个内置类的原型上查看到
/===========================================================/
//学习方法:
//1、方法的意义和作用
//2、方法的形参
//3、方法的返回值
//4、通过此方法,原来的数组是否发生了改变
/===========================================================/
//【实现数组的增加、修改和删除】
//【增加】
//1、push() 向数组的末尾追加新内容 ,并返回新的长度。原来的数组发生改变
//参数:一个到多个,任何数据类型都可以,想要给数组末尾追加什么,直接传递到push方法中即可,传递多个用逗号隔开
//返回值:返回新数组的长度
var ary = [12, 34, 45];
var num = ary.push(14, 'string', {name: 'aaa'}, function () {
});
console.log(ary); // 原来数组发生改变 => [12, 34, 45,14,'string',{name:'aaa'},function (){}]
console.log(num); // 新数组长度 => 7
//2、unshift() 向数组开头追加新内容
//参数:需要追加的内容(可以是多个任何数据类型值)
//返回值:新增后数组的长度
var ary2 = [1, 2, 3];
var aryLength = ary2.unshift('bbb');
console.log(ary2); // 向数组开头增加内容 => ['bbb',1,2,3]
console.log(aryLength); // 新增后数组的长度 => 4
//3、把数组当作一个普通的对象,使用对象键值对的操作,给其设置新的属性(索引)
//ary[ary.length]=xxx 向数组的末尾追加了新的内容
var ary3 = [7,8,9];
ary3[ary3.length] = 'hellowww';
console.log(ary3); // => [7,8,9,'hellowwww']
/===========================================================/
//【删除】
//1、pop() 删除数组最后一项
//参数:无
//返回值: 被删除的最后一项。原来的数组改变了
var arry = [1,2,3];
var popResult = arry.pop();
console.log(popResult);//返回被删除的项 => [3]
console.log(arry); // 原来的数组发生改变 => [1,2]
//2、shift() 删除数组第一项
//参数:无
//返回值:被删除的那一项内容,原有数组改变了
//使用shift删除数组第一项之后,后面每一项的索引都要向前进一位(导致后面项的索引发生改变)
var arry2 = [4,5,6];
var shiftResult = arry2.shift();
console.log(shiftResult); // 返回被删除的项 => [4]
console.log(arry2); // 原来数组改变了 => [5,6]
>[5, 6]
>0: 5 //索引向前进一位
>1: 6 //索引向前进一位
>length: 2
>__proto__: Array(0)
//3、把数组当做普通对象操作,delete删除
//delete ary[索引]删除指定索引这一项
//当前项被删除后,原有数组的其他项索引不会改变,当前的length不会改变
var arry3 = [7,8,9];
delete arry3[0];
console.log(arry3); //=> [empty, 8, 9]
>[empty, 8, 9]
>1: 8
>2: 9
>length: 3
>__proto__: Array(0)
//4、改变数组的长度
// ary.length-- 数组长度减1,删除数组的最后一项
var arry4 = [5,6,7];
console.log(arry4.length); // => 3
arry4.length--;
console.log(arry4); //=> [5,6]
console.log(arry4.length); // => 2
>[5, 6]
>0: 5
>1: 6
>length: 2
>__proto__: Array(0)
/===========================================================/
//【删除】、【增加】、【修改】
//splice() 数组内置类的方法,可以实现数组的增加、修改、删除
/*
* splice()实现删除:
* splice(n,m)从索引n开始删除m个(参数m不写是删除到数组的末尾)
*返回值:被删除的内容(以一个新数组保存被删除的内容),原有数组改变
*
* => splice(0) 参数为0,表示从索引0开始到数组末尾清空数组
* => splice() 不带参数,原有数组一项都不删除,返回值为一个空数组
*
*splice()实现修改:
* splice(n,m,x) 删除原有数组中索引为n开始m个项,并且n开始的m个项以x代替,
* 返回值为:以一个新数组保存从索引n开始m个项。原有数组发生改变
*
* splice()实现增加:
* splice(n,0,x) 删除原有数组中索引为n开始0个项,那就表示一项都不删除,而x则被
* 插入到索引n的前面。因为一项都不删除,所以返回值为:[]空数组。原有数组发生改变
*
*
* */
//举3个栗子:
/*======================================================================*/
//splice()实现删除:
var arryOne = [1,2,3];
//删除从索引0开始的 2个项,返回值赋值给变量sResult_1,此处的返回值是一个数组对象,其实变量存的是引用类型的地址
//指向这个新数组的内存地址。
var sResult_1 = arryOne.splice(0,2);
console.log(sResult_1); // => 返回值:[1,2]
console.log(arryOne); // =>原有数组发生改变 => [3]
//在发生改变的数组上继续操作
var sResult_2 = arryOne.splice(); // =>不带参数,不删除任何项
console.log(sResult_2); // => 返回值为空数组 => []
console.log(arryOne); //原有数组不改变 => [3]
var sResult_3 = arryOne.splice(0); // 从索引0开始清空数组
console.log(sResult_3); // 返回被删除的内容 => [3]
console.log(arryOne); // 原有数组改变 => []
/*======================================================================*/
//splice()实现修改:
var arryTwo = [100,200,300,400,500,600];
var atResult_1 = arryTwo.splice(1,3,999); //从索引1开始3个项被删除,并且替换成999
console.log(atResult_1); // 返回被删除的项 => [200,300,400]
//原有数组发生改变
console.log(arryTwo); // 删除的内容被替换,lenght也发生改变 => [100,999,500,600]
/*======================================================================*/
//splice()实现增加:
var arryThree = [9,8,7,6,5,4,3,2,1];
var athreeResult = arryThree.splice(1,0,'aaa'); //从索引1开始删除0个项,'aaa'被插入到索引1的前面
console.log(athreeResult); // 一项都不删除,返回值为空数组 => []
console.log(arryThree); //原有数组发生改变 => [9,'aaa',8,7,6,5,4,3,2,1]