javascript数组篇

本文详细介绍JavaScript数组的基本操作方法,包括修改原数组的多种方法如push、unshift等,以及数组排序、去重、拼接等高级操作技巧。通过具体实例帮助读者深入理解每个方法的应用场景。

总结数组操作的方法

修改原数组:
push/unshift 。
pop/shift
reverse
splice
sort

push与unshift 添加数据

push跟unshift都是继承Array的原型
返回值,都是执行了方法以后数组的长度
用法

var arr = [1, 2, 3]
console.log(arr.push(7)); //4  这个4就是现在数组的长度
arr.push(4);
console.log(arr); //[ 1, 2, 3, 7, 4 ]   //在最后面添加
arr.unshift(8);
console.log(arr); //[ 8, 1, 2, 3, 7, 4 ]  在最前面添加

push的源码

Array.prototype.myPush = function() {
    for (var i = 0; i < arguments.length; i++) {
        this[this.length] = arguments[i];
    }
    return this.length;
}
arr.myPush(1, 2, 3)
console.log(arr)

重写unshift源码

var arr = ['d', 'e', 'f'];
Array.prototype.myunshift = function() {
    var por = 0;
    for (var i = 0; i < arguments.length; i++) {
        this.splice(por, 0, arguments[i]);
        por++;
    }
    return this.length;
};
arr.myunshift('a', 'b', 'c');
console.log(arr);

pop和shift

每次会把数组的最后一位剪切掉,然后返回剪切掉的数值给你
pop例子
pop里面是没有参数的,他就是剪切数组的最后一位

var arr = ["a", "b", "c"];
console.log(arr.pop()); //c
console.log(arr);  //[ 'a', 'b' ]

shift例子
pop里面是没有参数的,他就是剪切数组的第一位

var arr = ["a", "b", "c"];
console.log(arr.shift())  //a
console.log(arr)  //[ 'b', 'c' ]

reverse方法(倒序)

var arr = ["a", "b", "c"];
arr.reverse();
console.log(arr) //[ 'c', 'b', 'a' ]

splice

//arr.splice(开始项的下标,剪切长度,剪切以后最后一位开始添加数据);

var arr = ['a', 'b', 'c'];
arr.splice(1, 1, 1, 2, 3);
console.log(arr);//[ 'a', 1, 2, 3, 'c' ],在剪切的位置添加数据

var arr = ["a", "b", "c", "e"];
arr.splice(3, 0, "d");
//因为选的事第4个,也就是e,但是没有删除他,所以会在她前面添加数据
console.log(arr); //[ 'a', 'b', 'c', 'd', 'e' ]

var arr = ["a", "b", "c", "e"];
arr.splice(3, -1, "d");
//-1的位置是指着e的
console.log(arr); //[ 'a', 'b', 'c', 'd', 'e' ]

数组排序之sort法

升降序

var arr = [-1, -5, 8, 0, 2];
arr.sort();
console.log(arr);//[ -1, -5, 0, 2, 8 ]用了sort方法后会升序排列


var arr = [27, 48, 6, 9];
arr.sort();
console.log(arr);//[ 27, 48, 6, 9 ]
sort->按照ascli码来排列的,会先对比第一位,而不是两位数



//用自己的方法来排序,必须要有的两样东西
//1.参数a,b;
//2.返回值:1.负值,a就排前面
//         2.正值,b就排前面
//         3.0保持不动
var arr = [27, 48, 6, 9];
arr.sort(function(a, b) {
    // if (a > b) {
    //     return 1;
    // } else {
    //     return -1;
    // }
    return a - b;//升序a-b,降序b-a;
});
console.log(arr); //[ 6, 9, 27, 48 ]

随机排序

//随机排序
var arr = [1, 2, 3, 4, 5, 6];
//Math.random()  -> 随机返回0-1的数;开区间
arr.sort(function(a, b) {
    var rand = Math.random(); //运用Math.random()随机生成的数来随机排序
    if (rand - 0.5 > 0) {
        return 1;
    } else {
        return -1;
    }
});
console.log(arr); //[ 5, 4, 3, 2, 6, 1 ]

数组里面是对象


//里面是对象
var arr = [{
        son: 'jenny',
        age: 18,
    },
    {
        son: 'jone',
        age: 10,
    },
    {
        son: 'Ben',
        age: 13,
    },
    {
        son: 'Lucy',
        age: 5,
    }
];
arr.sort(function(a, b) {
    if (a.age > b.age) {
        return 1;
    } else {
        return -1;
    }
});
console.log(arr);
//按长度排序
var arr = ['1', '123', '1234567', '12345', '12'];
arr.sort(function(a, b) {
    if (a.length > b.length) {
        return 1;
    } else {
        return -1;
    }
});
console.log(arr);

数组按照元素的字节数排序

//数组按照元素的字节数排序
//unicode 0-255 1字节  256(汉字)-  2字节

var arr = ['你好啊', 'ss', 'hello', '你在干嘛']

arr.sort(function(a, b) {
    return getBytes(a) - getBytes(b);
})

function getBytes(str) {
    var bytes = str.length;
    for (var i = 0; i < str.length; i++) {
        if (str.charCodeAt(i) > 255) {
            bytes++;
        }
    }
    return bytes;
}
console.log(arr);//[ 'ss', 'hello', '你好啊', '你在干嘛' ]

concat方法拼接数组

var arr1 = ['a', 'b', 'c'];
var arr2 = ['d', 'e', 'f'];
var arr3 = arr1.concat(arr2);
console.log(arr3);//[ 'a', 'b', 'c', 'd', 'e', 'f' ]

slice方法

//从第几位开始剪切到第几位
//slice-->[start,end)
var arr = ['a', 'b', 'c', 'd', 'e', 'f'];
var arr1 = arr.slice(); //[ 'a', 'b', 'c', 'd', 'e', 'f' ]
var arr1 = arr.slice(1); //[ 'b', 'c', 'd', 'e', 'f' ]
var arr1 = arr.slice(1, 3); //[ 'b', 'c' ]
console.log(arr1);

toString方法(数组转成字符串)

var arr = ['a', 'b', 'c'];
console.log(arr.toString());//a,b,c

join和split方法

join

var arr = ['a', 'b', 'c'];
//join里面什么都不填他就用逗号隔开,要是填什么就用什么隔开
var arr1 = arr.join();//a,b,c
var arr1 = arr.join("");//abc
console.log(arr1); 

split
把字符串变成一个数组,分隔符要跟字符串的分隔符一样才可以
join和split是一组的

var arr = ['a', 'b', 'c'];
//join里面什么都不填他就用逗号隔开,要是填什么就用什么隔开
var str = arr.join("-"); //a-b-c
console.log(str);
var arr1 = str.split('-'); //[ 'a', 'b', 'c' ]
//第二个参数是剪切的长度,长度多少里面就有多少位数
var arr1 = str.split('-', 2);//[ 'a', 'b' ]
console.log(arr1);

类数组

他不是继承Array的原型,而是继承Object

类数组

var obj = {
    '0': 0,
    '1': 1,
    '2': 2,
    'name': '你好啊',
    'age': 23,
    'length': 3,
    'splice': Array.prototype.splice, //让obj可以以数组的形式显示
    'push': Array.prototype.push //继承push方法
}
console.log(obj[2]);//2
console.log(obj.age);//23

//继承push的原理
Array.prototype.push = function(elem) {
    this[this.length] = elem;
    this.length++;
}

数组去重

a = [1, 1, 1, 2, 2, 2, 3, 3, 3]
Array.prototype.unique = function() {
    var temp = {},
        newArr = [];
    for (var i = 0; i < this.length; i++) {
    //hasOwnProperty查看数组里面有没有这个属性
        if (!temp.hasOwnProperty(this[i])) {
            temp[this[i]] = this[i];
            newArr.push(this[i]);
        }
    }
    return newArr;
}
console.log(a.unique());//[ 1, 2, 3 ]

字符串去重

var str = "sdasdsfasfgsadsdsds";
String.prototype.unique = function() {
    var temp = [],
        newStr = "";
    for (var i = 0; i < this.length; i++) {
        if (!temp.hasOwnProperty(this[i])) {
            temp[this[i]] = this[i];
            newStr += this[i]
        }
    }
    return newStr;
}

console.log(str.unique());//sdafg

forEach循环

简单实用

var arr = [1, 2, 3];
arr.forEach((elmen) => {
    console.log(elmen);
})

参数介绍

forEach方法中的function回调有三个参数:
array.forEach(function(遍历的数组内容,对应的数组索引,数组本身) {
    
});

应用

var arr = [1, 2, 3];
var a = 0;
arr.forEach(function(value, index, array) {
    array[index] == value;
    a += value;
});
console.log(a); //结果为 6

实现小项目

function test(day) {
    var weekday = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日'];
    weekday[day - 1] !== undefined ?
        console.log(weekday[day]) :
        console.log("erry");
}
test(2);//星期二

稀松数组

//稀松数组
var arr = [, 1, 1, , 1, ];
//因为前面的逗号数组会识别,最后一个逗号数组不会识别,所以长度只有5
console.log(arr.length);//5  
//逗号中间的地址访问都会返回undefined
console.log(arr[0])//undefined
console.log(arr);//[ <1 empty item>, 1, 1, <1 empty item>, 1 ]

ES6数组去重,求交集,并集,差集

Set介绍
Set ES6提供的新的数据结构Set(集合)。它类似于数组
集合的属性和方法
sise 返回集合的元素个数
add 增加一个新的元素,返回当前的集合
delete 删除元素,但会boolean值
has 检测集合中是否包含某个元素,放回boolean值

let ss = new Set(); //会自动去重

实践

//Set实践
let arr = [1, 2, 3, 4, 5, 4, 3, 2, 1];
//1.数组去重
let resultq = [...new Set(arr)]; //[...]不用这个的话不是数组
console.log(resultq);
//2.交集
let arr2 = [4, 5, 6, 5, 6];
let resultq2 = [...new Set(arr)].filter((item) => {
  let ss2 = new Set(arr2); //4 5 6
  if (ss2.has(item)) {
    return true;
  } else {
    return false;
  }
});
console.log(resultq2); //[ 4, 5 ]
//3.并集
let union = [...new Set([...arr, ...arr2])];
console.log(union);
//4.差集
let diff = [...new Set(arr)].filter((item) => {
  !new Set(arr2).has(item);
});
console.log(diff);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值