数组操作,追加、删除、替换

目录

数组是否存在某元素

数组元素的追加、删除、替换

数组排序

查找数组最大最小值

自定义排序、最大最小值方法

数组去重


数组是否存在某元素

indexOf 存在值返回索引 ,不存在值为-1

var arr=[1,2,3,4,5];
arr.indexOf(1); //0

includes 存在为true,不存在为false

var arr=[1,2,3,4,5];
arr.includes(1); // true

find 判断条件是否满足,满足返回元素,不满足返回undefined

var arr=[1,2,3,4,5];
arr.find(item=>{return item==2}); // 2

findIndex同find,不同的是返回的是元素下标

var arr=[1,2,3,4,5];
arr.findIndex(item=>{return item ===3}); //2

数组元素的追加、删除、替换

length操作数组元素

//追加元素
var arr = [1,2,3,4,5];
arr[arr.length] = 6;
console.log(arr); // [1,2,3,4,5,6]

//替换元素
var arr = [1,2,3,4,5];
arr[arr.length-3] = 6;
console.log(arr); // [1, 2, 6, 4, 5]

splice对数组元素操作

//删除
var arr = [1,2,3,4,5];
arr.splice(2,5); //删除第二个元素之后到第五个元素
console.log(arr); // [1, 2]

//追加
var arr = [1,2,3,4,5];
arr.splice(4,0,7);  // 在第四个元素后面追加
console.log(arr); // [1, 2, 3, 4, 7, 5]
var arr = [1,2,3,4,5];
arr.splice(4,0,7,6,6,6,6);  
console.log(arr); // [1, 2, 3, 4, 7, 6, 6, 6, 6, 5]

//替换
var arr = [1,2,3,4,5];
arr.splice(4,5,8);   //将第四个元素之后,到第五个元素替换
console.log(arr); // [1, 2, 3, 4, 8]
var arr = [1,2,3,4,5];
arr.splice(4,5,8,9,0,9); // 第三个参数往后不限制数量
console.log(arr); // [1, 2, 3, 4, 8, 9, 0, 9]

 push数组末尾追加一个或多个元素

var arr = [1,2,3,4,5];
arr.push(6,7,8);
console.log(arr); // [1, 2, 3, 4, 5, 6, 7, 8]

unshift数组首位前插入元素

var arr = [1,2,3,4,5];
arr.unshift(6); // 可多个,arr.unshift(6,7,8,9);
console.log(arr); // [6, 1, 2, 3, 4, 5]

concat数组合并,原数组不变

var arr = [1,2,3,4,5];
var newArr = arr.concat(6,7,8);
console.log(arr); // [1, 2, 3, 4, 5] 
console.log(newArr); // [1, 2, 3, 4, 5, 6, 7, 8]

var arr = [1,2,3,4,5];
var baa = [7,8,9,0];
var newArr = arr.concat(baa); //也可同时使用扩展运算符 arr.concat(...baa)
console.log(arr); // [1, 2, 3, 4, 5] 
console.log(baa); // [7,8,9,0]
console.log(newArr); // [1, 2, 3, 4, 5, 7, 8, 9, 0]

...扩展运算符将元素展开合并

var arr = [1,2,3,4,5];
arr = [...arr,7,8,9];
console.log(arr); // [1, 2, 3, 4, 5, 7, 8, 9]

数组排序

sort正序排列,数字、字母

var arr = [3,8,2,4,6,1];
arr.sort(); // [1, 2, 3, 4, 6, 8]

var arr = ['d','w','a','y','s','q'];
arr.sort(); // ['a', 'd', 'q', 's', 'w', 'y']

// 注意:排序会按首位数组、字母排序,对于数字排序会不准确
var arr = [38,83,211,042,6,1];
arr.sort(); // [1, 211, 34, 38, 6, 83]

reverse 数组倒叙排列

var arr = [1,2,3,4,5];
arr.reverse();
console.log(arr); // [5, 4, 3, 2, 1]

var arr = ['d','w','a','y','s','q'];
arr.reverse(); // ['q', 's', 'y', 'a', 'w', 'd']

比值函数,修正sort排序问题

function(a, b){
    return a-b; // a-b为正序,b-a为倒叙
                // 也可使用其他排序方式,随机顺序如:0.5 - Math.random()
};

var arr = [38,83,211,042,6,1];
arr.sort(function(a, b){ return a - b }); // [1, 6, 34, 38, 83, 211]

查找数组最大最小值

 Math.max()Math.min()

var arr = [38,83,211,042,6,1];
Math.max.apply(null,arr); // 211, null为对象,为了this的正确指向,必填
Math.min.apply(null,arr); // 1
Math.max(...arr); // 211
Math.min(...arr); // 1

自定义排序、最大最小值方法

对于数组排序、取数组最大最小值,都可通过自定义方法进行,自定义的方法有很多,只列举其中的一种,对于其他的,感兴趣的可以看文章最后附上的链接

//利用for循环,对数组进行排序 -- 冒泡
for(var i=0;i<arr.length;i++){
	for(var j=i+1;j<arr.length;j++){
		//如果第一个比第二个大,就交换他们两个位置
		if(arr[i]>arr[j]){
			var temp = arr[i];
			arr[i] = arr[j];
			arr[j] = temp;
		}
	}
}


// 查找最大值,最小值与之相反
function arrMax(arr) {
    var len = arr.length
    var max = -Infinity;
    while (len--) {
        if (arr[len] > max) {
            max = arr[len];
        }
    }
    return max;
}

数组去重

new Set() ES6新增

var arr = [1, 2, 2, 'abc', 'abc', true, true, false, false, undefined, undefined, NaN, NaN]; 
let a = [...new Set(arr)];
let b = Arry.from(new Set(arr));
console.log(a); // [1, 2, 'abc', true, false, undefined, NaN]
console.log(b); // [1, 2, 'abc', true, false, undefined, NaN]

// new Set(arr)  //Set(7) {1, 2, 'abc', true, false, …}
// set的元素是唯一的,不可重复了,可将数组去重,但返回的不是数组,需要重置

for循环

var arr = [1, 2, 2, 'abc', 'abc', true, true, false, false, undefined, undefined, NaN, NaN];
// 设置开关,如果重复开关关闭;区分开关,开的代表不重复,推到新数组中,达到去重的目的
function removeRepeat (arr) {
   let newArr = [];
   for(let i = 0;i<arr.length;i++){
      let  a = true; 
      for(let j = 0;j<newArr.length;j++){
        arr[i] === newArr[j] ? a = false : a;
      };
      a ? newArr.push(arr[i]) : newArr; 
   };
   return newArr;
}
removeRepeat(arr); // [1, 2, 'abc', true, false, undefined, NaN, NaN]

// 由输出结果可以看到,无法对NaN进行判断; NaN != NaN 

for+splice 

var arr = [1, 2, 2, 'abc', 'abc', true, true, false, false, undefined, undefined, NaN, NaN];
// 利用splice删除重复元素,达到去重的目的
function removeRepeat (arr) {
   for(let i = 0;i<arr.length;i++){
      for(let j = i+1;j< arr.length;j++){
        if(arr[i] === arr[j]) arr.splice(j,1);
      };
   };
    return arr;
}
removeRepeat(arr);  // [1, 2, 'abc', true, false, undefined, NaN, NaN]


// 由输出结果可以看到,无法对NaN进行判断; NaN != NaN 

for + sort


var arr = [1, 2, 2, 'abc', 'abc', true, true, false, false, undefined, undefined, NaN, NaN]; 

// 利用数组排序,然后再去比对前后元素是否一致 
function removeRepeat (arr) {
   let newArr = [];
   for(let i = 0;i<arr.length;i++){
     if(arr[i] !== arr[i+1]) newArr.push(arr[i]);
   };
    return newArr;
}
removeRepeat(arr.sort()); // [1, 2, NaN, NaN, 'abc', false, true]
// 由结果可以看出,不能判断NaN。NaN != NaN

for + includes

var arr = [1, 2, 2, 'abc', 'abc', true, true, false, false, undefined, undefined, NaN, NaN];
// 利用includes判断元素是否存在于数组中
var arr = [1, 2, 2, 'abc', 'abc', true, true, false, false, undefined, undefined, NaN, NaN]; 
function removeRepeat (arr) {
   let newArr = [];
   for(let i = 0;i<arr.length;i++){
     if(!newArr.includes(arr[i])) newArr.push(arr[i]);
   };
    return newArr;
}
removeRepeat(arr); // [1, 2, 'abc', true, false, undefined, NaN]

for + indexOf

var arr = [1, 2, 2, 'abc', 'abc', true, true, false, false, undefined, undefined, NaN, NaN];
// 利用indexOf判断元素是否存在
function removeRepeat (arr) {
   let newArr = [];
   for(let i = 0;i<arr.length;i++){
     if(newArr.indexOf(arr[i]) === -1) newArr.push(arr[i]);
   };
   // arr.forEach(item => {
   //   if (newArr.indexOf(item) === -1) newArr.push(item);
   // })
   return newArr;
}
removeRepeat(arr); // [1, 2, 'abc', true, false, undefined, NaN, NaN]

// 由输出结果可以看到,无法对NaN进行判断; NaN != NaN 

filter()+indexOf()

var arr = [1, 2, 2, 'abc', 'abc', true, true, false, false, undefined, undefined, NaN, NaN];
function removeRepeat(arr) {
    return arr.filter((item, index) => {
       return arr.indexOf(item) === index;
  })
}
removeRepeat(arr); // [ 1, 2, 'abc', true, false, undefined ]
// indexOf(NaN)结果为-1,所以输出结果中不包含NaN

map+has+set相结合

function removeRepeat(arr) {
    const map = new Map();
    const newArr = [];
    arr.forEach(item => {
      if (!map.has(item)) { // has()用于判断map是否包为item的属性值
        map.set(item, true); // 使用set()将item设置到map中,并设置其属性值为true
        newArr.push(item);
      }
    })
    return newArr;
};
removeRepeat(arr); // [ 1, 2, 'abc', true, false, undefined, NaN ]

文献参考:

超全的12种数组去重的方法_追逐原野.的博客-CSDN博客_数组去重

js中数组排序的五种方式_不甜呐的博客-CSDN博客_js 数组排序  这位大佬的文章中有动图

https://www.jb51.net/article/193524.htm

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值