<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
console.log("---- concat方法讲解 ----")
/*
array.concat(value, ...)
方法的作用:
方法concat()将创建并返回一个新数组,这个数组是将所有参数都添加到array中生成的。它并不修改array。
如果要进行concat()操作的参数是一个数组,那么添加的是数组中的元素,而不是数组。
方法的参数:
要增加到array中的值,可以是任意多个。
方法的返回值:
一个新数组
底层实现业务逻辑:
1、创建一个新的数组,然后把当前数组的值放到新数组里面
2、判断arguments长度是否为0,如果为0,返回参数数组
3、如果arguments长度不为0,依次判断每个参数的是否为数组;
Array.isArray(argArr)
4、如果不是数组,直接向新数组的最后添加即可
newArr[newArr.length] = 值;
5、如果是数组,那么遍历数组,然后把每次遍历的值都放在数组的末尾
for(){
newArr[newArr.length] = 遍历的值;
}
function concat(){
var newArr = new Array();
// 把this数组的值给放到newArr
if(arguments.length != 0){
for(var i in arguments){
var v = arguments[i];
if(Array.isArray(v)){ //表示参数是一个数组
// 遍历v,然后
for(){
newArr[newArr.length] = 遍历的值;
}
}else{ //不是一个数组
newArr[newArr.length] = 值;
}
}
}
return newArr;
}
*/
// 定义一个数组
var arr1 = ["小明", "小红", "小黑"]; // JS数组可以存储任意类型
console.log(arr1.concat());
// 把参数追加到原数组末尾,不会修改原数组,生成一个新数组
// var newArr1 = arr1.concat(100, true, "Hello"); // concat并不修改原数组,而是生成了一个新数组。
var argArr = new Array(1, 2, 3); //参数数组
var obj = {
name: "zhangsan"
};
// 其实底层是使用关键字instanceof
// Array.isArray(argArr) 检测一个对象是否是数组
console.log("argArr是否是一个数组:" + Array.isArray(argArr)); // true
console.log("obj是否是一个数组:" + Array.isArray(obj)); // false
console.log("Hello是否是一个数组:" + Array.isArray("Hello")); // false
var newArr1 = arr1.concat(obj); // concat如果传递的是一个参数数组,那么会把参数数组里面的每一个元素都追加到原数组的末尾,不会作为整体存储
console.log("concat操作完毕之后,arr1数值的值:" + arr1);
console.log("concat操作完毕之后,返回值是一个新数组:" + newArr1);
console.log(newArr1)
console.log("---- join方法讲解 ----")
/*
array.join( )
array.join(separator)
方法的作用:
方法join()将把每个数组元素转换成一个字符串,然后把这些字符串连接起来,在两个元素之间插入指定的separator字符串。返回生成的字符串。
该方法简单来说,就是把数组转换为指定格式的字符串
方法的参数:
在返回的字符串中用于分隔数组元素的字符或字符串,它是可选的。如果省略了这个参数,用逗号作为分隔符。
方法的返回值:
拼接好的字符串
底层实现业务逻辑:
1、创建一个空字符串
2、判断arguments的长度,如果长度为0,则遍历this数组,使用,拼接字符串
3、如果长度不为0,则取arguments下标0的值进行拼串;
*/
// toString() String() 任意类型转换为字符串类型
var arr2 = [123, 456, 789];
var arr2Str = arr2.join("#"); //没有传递参数,那么使用逗号作为分隔符
console.log("join方法执行完毕,返回值类型:" + typeof arr2Str);
console.log(arr2Str);
console.log("---- pop方法讲解 ----")
/*
array.pop( )
方法的作用:
方法pop()将删除array的最后一个元素,把数组长度减1,并且返回它删除的元素的值。如果数组已经为空,则pop()不改变数组,返回undefined。
方法的返回值:
array的最后一个元素。
底层实现业务逻辑:
1、先判断当前数组的长度是否为0
2、如果为0,则什么都有不处理 return;
3、如果数组长度不为0,this.length = this.length - 1;
4、在修改数组长度之前,把arr[this.length-1]保存下来,然后反馈
*/
var arr3 = [];
var deleteEle = arr3.pop();
console.log("pop操作完毕之后,arr3:" + arr3);
console.log("返回值:" + deleteEle);
/*
学习方法:
1、方法的功能
2、方法的参数
3、方法的返回值
*/
console.log("---- push方法讲解 ----")
/*
array.push(value, ...)
方法push()将把它的参数顺次添加到array的尾部。它直接修改array,而不是创建——个新的数组。方法push()和方法pop()用数组提供先进后出栈的功能。
返回值:把指定的值添加到数组后的新长度。
参数:value, ... 要添加到array尾部的值,可以是一个或多个。
*/
var arr4 = [11, 22, 33, 44];
// var arr4Legth = arr4.push("小黑", "小白", 110);
arr4.push(["小黑", "小明"]);
console.log("push操作完毕之后,arr4的值:" + arr4)
console.log(arr4);
// console.log(arr4Legth);
console.log("---- reverse方法讲解 ----")
/*
array.reverse( )
描述:Array对象的方法reverse()将颠倒数组中元素的顺序。它在原数组上实现这一操作,即重排指定的array的元素,但并不创建新数组。如果对array有多个引用,那么通过所有引用都可以看到数组元素的新顺序。
*/
var arr5 = [11, 22, 33, 44, 55];
var x = arr5.reverse();
console.log("arr5调用reverse之后:" + arr5);
console.log(x); // 把反转之后的数组反馈
console.log("---- shift方法讲解 ----")
/*
array.shift( )
描述:方法shift()将把array的第—个元素移出数组,返回那个元素的值,并且将余下的所有元素前移一位,以填补数组头部的空缺。如果数组是空的,shift()将不进行任何操作,返回undefined。注意,该方法不创建新数组,而是直接修改原有的数组。
返回值:数组原来的第一个元素。
*/
var arr6 = [11, 22, 33, 44, 55];
var deleteEle = arr6.shift();
console.log("arr6调用shift之后:" + arr6);
console.log("删除的元素是:" + deleteEle);
console.log("---- unshift方法讲解 ----")
/*
array.unshift(value, ...)
描述:方法unshift()将把它的参数插入array的头部,并将已经存在的元素顺次地移到较高的下标处,以便留出空间。该方法的第一个参数将成为数组新的元素0,如果还有第二个参数,它将成为新的元素1,以此类推。注意,unshift()不创建新数组,而是直接修改原有的数组。
返回值:数组的新长度
参数:value, ... 要插入数组头部的一个或多个值。
*/
var arr7 = [11, 22, 33, 44, 55];
// var arr7Length = arr7.unshift("xx", "yy");
var arr7Length = arr7.unshift(["xx", "yy"]);
console.log("arr7调用unshift之后:" + arr7);
console.log("arr7调用unshift返回值:" + arr7Length);
console.log("---- slice方法讲解 ----")
/*
array.slice(start, end)
描述:方法slice()将返回数组的一部分,或者说是一个子数组。返回的数组包含从start 开始到end之间的所有元素,但是不包括end所指的元素。如果没有指定end,返回的数组包含从start开始到原数组结尾的所有元素。
返回值:一个新数组,包含从start到end(不包括该元素)指定的array元素。
参数
start 数组片段开始处的数组下标。如果是负数,它声明从数组尾部开始算起的位置。 也就是说,-1指最后一个元素,-2指倒数第二个元素,以此类推。
end 数组片段结束处的后一个元素的数组下标。如果没有指定这个参数 包含从start开始到数组结束的所有元素。如果这个参数是负数, 从数组尾部开始算起的元素。
*/
var arr8 = ["xx", "yy", "zz", "kk", "jj"];
var sliceArr1 = arr8.slice(2); //从下标2开始,截取到数组的末尾,生成一个新数组 ["zz", "kk", "jj"]
console.log("从下标2开始截取,得到子数组:" + sliceArr1);
var sliceArr2 = arr8.slice(1, 4); // 从下标1开始,截取到下标4,但是不包含下标4 ["yy", "zz", "kk"]
console.log("从下标1开始,截取到下标4,得到子数组:" + sliceArr2)
var sliceArr3 = arr8.slice(-3); // 从倒数第三个,截取到末尾 ["zz", "kk", "jj"]
console.log("从倒数第三个截取到末尾,得到数组:" + sliceArr3)
var sliceArr4 = arr8.slice(-4, 3); // ["yy", "zz"]
console.log(sliceArr4);
console.log("---- splice方法讲解 ----")
/*
array.splice(start, deleteCount, value, ...)
方法作用: 可以实现数组元素的添加、删除、替换;
参数
start :开始插入和(或)删除的数组元素的下标。
deleteCount :从start开始,包括start所指的元素在内要删除的元素个数。这个参数是可选的,如果没有指定它,splice()将删除从start开始到原数组结尾的所有元素。
value, ... :要插人数组的零个或多个值,从start所指的下标处开始插入。
*/
// splice实现数组元素的删除
// pop() 尾部删除 shift() 头部删除
var arr9 = ["xx", "yy", "zz", "kk", "jj"];
// arr9.splice(arr9.length - 1, 1); // 使用splice替代pop()
// arr9.splice(0, 1); // 使用splice替代shift()
// 如果是做数组头部或尾部元素的删除,那么还是推荐使用pop()和shift()
// 但是如果要一次性删除多个或任意位置的数组元素,那么就要使用splice()
// arr9.splice(1, 3);
// splice实现数组元素的添加
// push() 尾部添加 unshift() 头部添加
// arr9.splice(arr9.length, 0, 110); //使用splice替代push()
// arr9.splice(0, 0, 110); // 使用splice替代unshift()
// 如果是做数组头部或尾部元素的添加,那么还是推荐使用push()或unshift()
// 但是如果要添加到指定位置,那么就使用splice()
// arr9.splice(2, 0, 110, 119);
// splice实现数组元素的替换, 删除之后新增
// arr9.splice(1, 2, 110, 119)
console.log(arr9)
console.log("---- sort方法讲解 ----")
/*
array.sort( )
Array.sort( ) 对数组元素进行排序
array.sort( ) array.sort(orderfunc)
参数
orderfunc 用来指定按什么顺序进行排序的函数,可选。
返回值对数组的引用。注意,数组在原数组上进行排序,不制作副本。
描述
方法sort()将在原数组上对数组元素进行排序,即排序时不创建新的数组副本。如果调用方法sort()时没有使用参数,将按字母顺序(更为精确地说,是按照字符编码的顺序)对数组中的元素进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如果有必要的话),以便进行比较。
如果想按照别的顺序进行排序,就必须提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数a和b
参数
orderfunc
用来指定按什么顺序进行排序的函数,可选。
*/
var arr10 = [1111, 4, 38, 9];
// arr10.sort(); //如果没有传递参数,那么把数组元素转换为字符串进行比较;
arr10.sort(function(a, b) {
// 如果排序函数的返回值是a - b;那么是升序排列! 如果是b - a,则是降序排列
// return a - b;
return b - a;
});
console.log("sort没有传递参数进行排序:" + arr10);
console.log(typeof arr10.toLocaleString());
/*
1、JS数组中concat()和push()的区别?
2、JS数组中pop()、push()、shift()、unshift()的作用
3、如下代码的执行结果:
var arr8 = ["xx", "yy", "zz", "kk", "jj"];
var sliceArr4 = arr8.slice(-4, 3); // ["yy", "zz"]
4、JS数组中slice()和splice()的区别?
*/
// var arr = [11, 22, 33];
// var str = arr[0] + ""; // "11"
// for (var i = 1; i < arr.length; i++) {
// str += "#" + arr[i];
// }
// console.log(str);
var arrx = [1, 2, 7, 3, 4];
// function rv(arr) {
// var newArr = new Array();
// for (var i = 0; i < arr.length; i++) {
// newArr[i] = arr[arr.length - 1 - i];
// }
// return newArr;
// }
/*
0 3
1 2
*/
function rv(arr) {
for (var i = 0; i < arr.length / 2; i++) {
var temp = arr[i];
arr[i] = arr[arr.length - 1 - i];
arr[arr.length - 1 - i] = temp;
}
return arr;
}
console.log(rv(arrx));
</script>
</body>
</html>