目录
(截取、删除/插入/替换)5.arr.splice(index, howmany, item1, …, itemX) 删除、插入、替换
splice()有2个参数时:splice(起始下标,删除个数)
splice()有3个参数或多个时:第二个参数不为0则替换元素
splice()有3个参数或多个时:第二个参数为0则插入/添加元素
(合并)3.arr.concat(array1,array2,...array3) 合并数组
(截取)4.arr.slice(start,end) 截取数组
(查找)5.arr.indexOf(value,start) 查找数组元素
1.arr.forEach(item,index) 循环遍历
2.arr.map(item,index) 返回新数组,通过return输出
3.arr.every(item,index) 全部元素满足条件
4.arr.some(item,index) 部分元素满足条件
5.arr.fliter(item,index) 条件过滤数组
一、改变原数组
(添加)1.arr.push(value) 末尾添加
//push 末尾添加
//返回数组新长度
// let newarr = arr.push(4);
// console.log(newarr);
let arr = [1,2,3,4]
let newArr = arr.push(5);
console.log("返回数组的新长度:"+newArr);//返回数组的新长度:5
console.log(arr);//[1, 2, 3, 4, 5]
(添加)2.arr.unshift(value) 首位添加
//unshift 首位添加
//返回新的数组长度
// let newarr = arr.push(4);
// console.log(newarr);
let arr = [1,2,3,4]
let newArr = arr.unshift(0);
console.log("返回数组的新长度:"+newArr);//返回数组的新长度:5
console.log(arr);//[0, 1, 2, 3, 4]
(删除)3.arr.shift(value) 首位删除
//shift 删除第一个元素
//并返回被删除的元素的值
//arr.length返回数组新长度
// let newarr = arr.shift()
// console.log(newarr,arr);
let arr = [1,2,3,4];
let newArr = arr.shift();
console.log("返回数组的新长度:"+arr.length);//返回数组的新长度:3
console.log("返回被删除的元素:"+newArr);//返回被删除的元素:1
console.log(arr);//[2, 3, 4]
(删除)4.arr.pop(value) 末尾删除
//pop 删除最后一个元素
//并返回被删除的元素的值
//arr.length返回数组新长度
let arr = [1,2,3,4];
let newArr = arr.pop();
console.log("返回数组的新长度:"+arr.length);//返回数组的新长度:3
console.log("返回被删除的元素:"+newArr);//返回被删除的元素:4
console.log(arr);//[1,2, 3]
(截取、删除/插入/替换)5.arr.splice(index, howmany, item1, …, itemX) 删除、插入、替换
下标,删除个数,插入元素
1.参数为正数
splice()只有1个参数时:包含该下标元素,删除后面所有的元素
let arr = [1,2,3,4,5,6,7,8,9]
let arr1 = arr.splice(3)
//包含该下标元素,删除后面所有的
console.log(arr) //[1, 2, 3]
console.log(arr1) //[4, 5, 6, 7, 8, 9]
splice()有2个参数时:splice(起始下标,删除个数)
let arr = [1,2,3,4,5,6,7,8,9]
let arr1 = arr.splice(1,3)
//(起始下标1,删除3个)
console.log(arr) //[1, 5, 6, 7, 8, 9]
console.log(arr1) //[2, 3, 4]
splice()有3个参数或多个时:第二个参数不为0则替换元素
let arr = [1,2,3,4,5,6,7,8,9]
let arr1 = arr.splice(1,5,20)
//(起始下标1,删除5个,20插入到起始下标的位置)
console.log(arr) //[1, 20, 7, 8, 9]
console.log(arr1) //[2, 3, 4, 5, 6]
splice()有3个参数或多个时:第二个参数为0则插入/添加元素
let arr = [1,2,3,4,5,6,7,8,9]
arr.splice(1,0,20)
//(起始下标1,20插入到起始下标的位置)
console.log(arr) //[1,20,2,3,4,5,6,7,8,9]
2. 参数为负数
如果第1个参数为负数,从右到左开始删除:
let arr = [1,2,3,4,5,6,7,8,9]
let arr1 = arr.splice(-2)
console.log(arr) //[1, 2, 3, 4, 5, 6, 7]
console.log(arr1) //[8, 9]
如果第2个参数为负数,视为0:
全删
let arr = [1,2,3,4,5,6,7,8,9]
let arr1 = arr.splice(-2,-4)
console.log(arr) //[1, 2, 3, 4, 5, 6, 7]
console.log(arr1) //[]
(反转)6.arr.reverse() 倒转数组
//reverse 倒转数组
let arr = [1,2,3,4];
arr.reverse();
console.log(arr);//[4, 3, 2, 1]
(排序)7.arr.sort() 数组 排序
sort() 方法用原地算法对数组的元素进行排序,并返回数组。
默认排序顺序是在将元素转换为字符串,然后比较它们的码点(在字符集中的序号)
1.排序
/* sort() 方法用原地算法对数组的元素进行排序,并返回数组。
默认排序顺序是在将元素转换为字符串,然后比较它们的码点(在字符集中的序号) */
function demoSort() {
var arr = ['ni', 'mei', 'zhen', 'bang'];
arr.sort();
console.log(arr);//['bang', 'mei', 'ni', 'zhen']
var arr2 = [1, 30, 4, 21, 100000];
arr2.sort();
console.log(arr2);//[1,100000,21,30,4]
}
2.自定义数组排序
通过数组大小排序
/* 自定义排序规则 */
function demoSort2() {
var arr = [1, 30, 4, 21, 100000];
arr.sort(
function (a, b) {
// console.log(a,b);
return a - b
}
);
console.log(arr);//[1, 4, 21, 30, 100000]
}
3.自定义数组字符串排序
通过字符串长度排序
function demoSort3() {
var arr = [
"胆小怕事受气包豹子头林冲",
"天王晁盖",
"呼保义宋江",
"blackwind KuiLi",
"大阴人智多星吴用",
];
arr.sort(
function (a, b) {
return b.length - a.length
}
);
console.log(arr);//['blackwind KuiLi', '胆小怕事受气包豹子头林冲', '大阴人智多星吴用', '呼保义宋江', '天王晁盖']
}
demoSort3()
二、不改变原数组
(连接)1.arr.join("连接符) 连接
/* join() 方法将一个数组(或一个类数组对象)的所有元素连接成一个字符串并返回这个字符串。
如果数组只有一个项目,那么将返回该项目而不使用分隔符。 */
function demoJoin() {
const arr = ['Fire', 'Air', 'Water'];
console.log(arr.join());
// expected output: "Fire,Air,Water"
console.log(arr.join(''));
// expected output: "FireAirWater"
console.log(arr.join('-'));
// expected output: "Fire-Air-Water"
}
(转化)2.arr.toString() 数组转字符串
toString()方法: 常用,只是toString()无法转换null和undefined
//不改变旧数组
// //toString 数组转字符串
let arr = [1,2,3,4];
let str =arr.toString();
console.log(str);//4, 3, 2, 1
(合并)3.arr.concat(array1,array2,...array3) 合并数组
let a = [1,2,3];
a.concat(4,5); // [1,2,3,4,5]
a.concat([4,5]); // [1,2,3,4,5]
a.concat(4, [5, [6, 7]]); // [1,2,3,4,5,[6,7]]
(截取)4.arr.slice(start,end) 截取数组
1.参数为正数
slice()只有1个参数时:
let arr = [1,2,3,4,5,6,7,8,9]
let arr1 = arr.slice(3)
//包含该下标元素,截取后面所有的元素
console.log(arr) // [1, 2, 3, 4, 5, 6, 7, 8, 9]
console.log(arr1) // [4, 5, 6, 7, 8, 9]
slice()有2个参数时:
slice(start,end-1)包含的起始下标,不包含的结束下标
let arr = [1,2,3,4,5,6,7,8,9]
let arr1 = arr.slice(3,6)
//(包含的起始下标,不包含的结束下标(index-1))
console.log(arr) // [1, 2, 3, 4, 5, 6, 7, 8, 9]
console.log(arr1) // [4, 5, 6]
参数为负数
let arr = [1,2,3,4,5,6,7,8,9]
let arr1 = arr.slice(3,-2)
//(从左开始截取下标,负数从右开始截取下标)
console.log(arr) // [1, 2, 3, 4, 5, 6, 7, 8, 9]
console.log(arr1) // [4, 5, 6, 7]
let arr = [1,2,3,4,5,6,7,8,9]
let arr1 = arr.slice(-4,-2)
//(负数从右开始截取下标,负数从右开始截取下标)
console.log(arr) // [1, 2, 3, 4, 5, 6, 7, 8, 9]
console.log(arr1) // [6, 7]
如果第二个负数参数的位置超过第一个参数的位置,则返回 [ ]
let arr = [1,2,3,4,5,6,7,8,9]
let arr1 = arr.slice(3,-6)
console.log(arr) // [1, 2, 3, 4, 5, 6, 7, 8, 9]
console.log(arr1) // []
slice()操作字符串时,参数情况和返回结果和数组是一样的
let arr = 'abcdefghijklmn'
let arr1 = arr.slice(2,4)
console.log(arr) // abcdefghijklmn
console.log(arr1) // cd
(查找)5.arr.indexOf(value,start) 查找数组元素
返回 item 的第一次出现的索引位置,如果在数组中没找到指定元素则返回 -1
如果你想查找字符串最后出现的位置,请使用 lastIndexOf() 方法
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var a = fruits.indexOf("Apple");//2
---------------------------从4开始查找,默认不填为从0开始
var fruits=["Banana","Orange","Apple","Mango","Banana","Orange","Apple"];
var a = fruits.indexOf("Apple",4);//6
三、循环 (第一个入参function(item,index))
1.arr.forEach(item,index) 循环遍历(无返回值)
无返回值:返回值都为undefined
arr.forEach(数组元素,下标)
var arr = [1, 2, 3, 4, 5];
arr.forEach(function(item, index){
console.log(item, index);
});
2.arr.map(item,index) 返回新数组,通过return输出
arr.map(数组元素,下标)
/* map 将原数组映射为一个新数组 (原数组中的每个元素根据您提供的映射规则(函数表示)
生成一个新元素并丢入新数组) */
function demoMap() {
var arr = [1, 4, 9, 16];
var mappedArr = arr.map(
// 定义映射规则
// 原数组中的元素x进去 一个改造后的新值出来(进入新数组mappedArr)
function (element, index) {
var newValue = Math.sqrt(element)
console.log(index, element, newValue);
// 返出的新值进入新数组mappedArr
return newValue
}
);
console.log(mappedArr);//[1,2,3,4]
console.log(arr);//[1 4 9 16]
}
// demoMap()
3.arr.every(item,index) 全部元素满足条件
返回boolean值
function demoEvery() {
var arr = [2, 4, 6, 8, 10,13];
/* 回答【arr中是否人人都是偶数】 */
var allEven = arr.every(
// 检查规则函数
// 如果被测元素element是偶数,则返回true否则返回false
// 只要有一个元素通过测试 则some的整体结果就是true
function (element, index) {
var isEven = element % 2 === 0
console.log(index, element, isEven);
return isEven
}
);
console.log(allEven);//false
}
4.arr.some(item,index) 部分元素满足条件
返回boolean值
至少一个满足条件
function demoSome() {
var arr = [1, 2, 3, 4, 5];
/* 回答【arr中是否至少有一个偶数】 */
var hasEven = arr.some(
// 检查规则函数
// 如果被测元素element是偶数,则返回true否则返回false
// 只要有一个元素通过测试 则some的整体结果就是true
function (element, index) {
var isEven = element % 2 === 0
console.log(index, element, isEven);
return isEven
}
);
console.log(hasEven);//true
}
5.arr.fliter(item,index) 条件过滤数组(返回值为:true/false)
/* filter() 方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。 */
function demoFilter() {
var arr =
['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
var filteredArr = arr.filter(
function (element, index) {
var isVeryLong = element.length > 6
console.log(index, element, isVeryLong);
// 根据长度是否大于6 return true/false
/*如果return true 则当前element能通过过滤
进入过滤后的数组filteredArr*/
return isVeryLong
}
);
console.log(filteredArr);//["exuberant", "destruction", "present"]
console.log(arr);
}
// demoFilter()
ps:splice和slice的区别
相同:都可以截取数组
不同:splice返回旧数组 splice(开始下标,截取长度,插入\删除的值)
slice返回新数组 slice(开始,结束-1) 含头不含尾 不以下标为开始