常见改变原数组的:
let color = ["red", "blue", "green"]
// 数组中增加值
// color[1] = "yellow"
color[3] = "yellow"
console.log (color)//[ 'red', 'blue', 'green', 'yellow' ]
color[5] = "yellow"//[ 'red', 'blue', 'green', <2 empty items>, 'yellow' ]
let color = ["red", "blue", "green",'red', 'blue', 'green']
color[color.length-1]
*1. toString() (不改变原数组)
返回将数组转换成用数组值以逗号分割开的字符串
let color = ["red", "blue", "green"]
color.toString()
let color = ["red", "blue", "green"]
let _color = color.toString()
console.log (color)//[ 'red', 'blue', 'green' ]
console.log (_color)//"red,blue,green"
根据打印结果可以看出来toString方法不会改变原数组,arrayObject 的字符串表示
*2. join()
返回一个自定义分隔符的以数组元素组成的字符串,不传值默认是以","分隔
let color = ["red", "blue", "green"]
console.log (color.join( ))//red,blue,green
console.log (color.join(":"))//red:blue:green
在数组的开头添加元素,根据答应结果可以看出,unshift()改变了原数组,返回值是改变后数组的长度
let color = ['a', 'b', 'c']
console.log(color.unshift('w')) //4
console.log(color)//[ 'w', 'a', 'b', 'c' ]
在数组的结尾添加元素,根据打印结果可以看出,push()方法改变了原数组,返回值是改变后数组的长度
let color = ['a', 'b', 'c']
console.log(color.push('w'))//4
console.log (color)//[ 'a', 'b', 'c', 'w' ]
删除数组中最后一个元素改变了原数组,返回的是删除的元素
let color = ['a', 'b', 'c']
console.log(color.pop())//'c'
console.log(color)//['a,'b']
删除数组中首个元素,并把所有其他元素移到更低的索引,改变了原数组,返回的是删除的元素
let color = ['a', 'b', 'c']
console.log (color.shift())//'a'
console.log (color)//[ 'b', 'c' ]
改变了原数组,返回被删除的项目。
index:整数,规定添加/删除项目的位置
howmany:要删除的项目数量。如果设置为 0,则不会删除项目
可选。向数组添加的新项目。
/*删除数组*/
let color = ['a', 'b', 'c']
console.log(color.splice(1,1))//['b']
console.log(color)//[ 'a', 'c' ]
/*增加数组*/
let _color = ['a', 'b', 'c']
console.log(_color.splice(1,0,'pz'))//[],没有删除元素所以为空
console.log(_color)//[ 'a', 'pz', 'b', 'c' ]
不改变原数组,返回一个新的数组,包含从 start 到 end (不包括该元素)的 原数组中的元素。
start 规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。
end 可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。
let color = ['a', 'b', 'c']
console.log(color.slice( -3,-1))//[ 'a', 'b' ]
console.log(color)//[ 'a', 'b', 'c' ]
let color = ['a', 'b', 'c']
console.log(color.slice( 1,2))//[ 'b' ]
console.log(color)//[ 'a', 'b', 'c' ]
不会改变原数组
返回拼接的数组
let man = ['a', 'b']
let woman = ['b', 'd']
let child = man.concat(woman)
console.log(child)//[ 'a', 'b', 'b', 'd' ]
let arr = ['a', 'b', 'c']
arr.forEach((item,index) => {
console.log (item,index)
} )
console.log (arr)
let arr = [1, 2, 3]
let _arr = arr.map((item,index) =>item*2)
console.log(arr) //[ 1, 2, 3 ]
console.log(_arr)//[ 2, 4, 6 ]
let arr = [1, 2, 3]
console.log(arr.every((item,index) => item > 2))//false
let arr = [1, 2, 3]
console.log(arr.some((item,index) => item > 2))//true
let arr=['a','b','c']
for (let item of arr){
console.log(item);
}
var arr = ["abc", "bcd", "234", , , , 54, 2, 1];
for (var key of arr.keys()) {
console.log (key)//0,1,2,3,4,5,6,7,8
}
for (var value of arr.values()){
console.log(value)//abc bcd 234 undefined undefined undefined 54 2 1
}
for (var entry of arr.entries()){
console.log(entry)
}
// [ 0, 'abc' ]
// [ 1, 'bcd' ]
// [ 2, '234' ]
// [ 3, undefined ]
// [ 4, undefined ]
// [ 5, undefined ]
// [ 6, 54 ]
// [ 7, 2 ]
// [ 8, 1 ]
let name = ['pz', 'yjl','kobe','James']
let _name = name.filter((item,index)=> item.length > 3)
console.log(name)//[ 'pz', 'yjl', 'kobe', 'James' ]
console.log(_name)//[ 'kobe', 'James' ]
let name = ['pz', 'yjl','kobe','James']
let _name = name.find((item,index)=> item.length > 3)
let _name2 = name.find((item,index)=> item.length > 5)
console.log(name)//[ 'pz', 'yjl', 'kobe', 'James' ]
console.log(_name)//kobe
console.log(_name2)//undefined
let arr =Array.of(3,4,5,6);
console.log(arr);//[ 3, 4, 5, 6 ]
let arr =Array.of('pz', 'yjl','kobe','James');
console.log(arr);//[ 'pz', 'yjl', 'kobe', 'James' ]
let json = {
'0': 'a',
'1': 'bb',
'2': 'ccc',
length:3
}
let arr=Array.from(json);
console.log(arr)//[ 'a', 'bb', 'ccc' ]
console.log(Array.from([1, 2, 3], x => x + x));
数组去重在工作中真的是很常见的业务处理,那么总结一下常用方法义不容辞,实际上有两种业务情况,第一种是在一个数组中有重复项,需要去除重复项,另一种是对比另一个数组,去掉跟另一个数组重复的项
前置知识:Set本身是一个构造函数,用来生成Set数据结构,ES6提供了新的数据结构Set,类似于数组,但是成员的值都是唯一的,没有重复的值。
eg1:
const set = new Set()
const arr = [1, 2, 3,3, 4, 4, 5]
arr.forEach(x => set.add(x))
console.log(set)//Set { 1, 2, 3, 4, 5 }
for(let item of set) {
console.log(item)// 1, 2, 3, 4, 5
}
//eg2:Set+扩展运算符(...)数组去重
const set2 = new Set([1, 2, 3,3, 4, 4, 5])
console.log([...set2])//[ 1, 2, 3, 4, 5 ]
封装数组去重方法
const unique = arr => Array.from(new Set(arr))//封装函数
const arr = [1, 2, 3,3, 4, 4, 5]
let uniqueArr = unique(arr)//代用
console.log(uniqueArr)//[ 1, 2, 3, 4, 5 ]
这个是代码量最少的方法
/*循环的元素的后面有没有跟该元素相同的*/
const unique = arr => {
for (let i = 0; i < arr.length; i++) {
for(let j = i+1; j < arr.length-1; j++) {
if (arr[i]===arr[j]) {
arr.splice(i,1)
i--
}
}
}
return arr
}
/*另一种写法,循环的元素的前面有没有跟该元素相同的*/
const unique = arr => {
for (let i = 0; i < arr.length; i++) {
for(let j = 0; j < i; j++) {
if (arr[i]===arr[j]) {
arr.splice(i,1)
i--
}
}
}
return arr
}
/*不改变原始数组的方法*/
const unique = (arr,uniqueArr )=> {
for (let i = 0; i < arr.length; i++) {
for(let j = i+1; j < arr.length; j++) {
if (arr[i]===arr[j]) {
j=++i
}
}
uniqueArr.push(arr[i])
}
}
const arr = [1, 2, 3, 3, 4, 4, 5]
let uniqueArr= new Array()
unique(arr,uniqueArr)
console.log(uniqueArr)
const unique = (arr,uniqueArr )=> {
if (!Array.isArray(arr)) {
console.log('type error!')
return
}
for (let i = 0; i < arr.length; i++) {
uniqueArr.indexOf (arr[i]) === -1 && uniqueArr.push(arr[i])
}
}
const arr = [1, 2, 3, 3, 4, 4, 5]
let uniqueArr= new Array()
unique(arr,uniqueArr)
console.log(uniqueArr)
const unique = arr => arr.filter((item,index) => arr.indexOf(item)===index)
const arr = [1, 2, 3, 3, 4, 4, 5]
let uniqueArr= unique(arr)
console.log(uniqueArr)
const unique = (arr,uniqueArr )=> {
if (!Array.isArray(arr)) {
console.log('type error!')
return
}
let tag = {}
for (let i = 0; i < arr.length; i++) {
if(!tag[arr[i]]) {
uniqueArr.push(arr[i])
tag[arr[i]]=true
}
}
}
const arr = [1, 2, 3, 3, 4, 4, 5]
let uniqueArr= new Array()
unique(arr,uniqueArr)
console.log(uniqueArr)
主要用filter过滤数组
const a=[1,2,3,4,5]
const b=[2,3,7,8,9]
console.log(a.filter(item=>b.indexOf(item)===-1))
console.log(a.filter(item =>!b.some(e => e === item)))
console.log(a.filter(v => !b.includes(v)))
console.log(a.filter(item => b.every(e => e!== item)))
tip:>(免费获取最新完整前端课程关注vx公众号:前端拓路者coder,回复:资料
如果这个文章对你有用的话,欢迎点赞转发关注,让更多的小伙伴看到呀,毕竟分享是一个程序员最基本的美德!!!如果有不对的请大佬指教)