javascript中数组操作

javascript中Array相关的属性和方法

欢迎访问我的博客,祝码农同胞们早日走上人生巅峰,迎娶白富美~~~

Array 对象属性

constructor : 返回对创建此对象的数组函数的引用

1
2
3
4
var test=new Array()
if (test.constructor==Array){
document.write("This is an Array")
}

length 设置或返回数组中元素的数目。

prototype 可以向构造函数的原型对象添加属性和方法

Array对象方法

concat()

连接两个或更多的数组,并返回结果

1
2
3
4
var arr = [1,2,3,4];
var arr2 = [5,6,7,8];
var arr3 = arr.concat(arr2);
console.log(arr3); // 连接之后返回的数组为:[1, 2, 3, 4, 5, 6, 7, 8]

join()

把数组的所有元素放入一个字符串,元素通过指定的分隔符进行分隔

1
2
3
var arr = ['xiao','lin','qiqi','mingtian'];
var arr2 = arr.join(',');
console.log(arr2); // 根据','隔开返回的字符串为:"xiao,lin,qiqi,mingtian"

pop()

删除并返回数组的最后一个元素

1
2
3
4
var arr = [2,3,4,5];
var arr2 = arr.pop();
console.log(arr2); // 删除的数组的最后一个元素为:5
console.log(arr); // 删除元素之后的数组为:[2, 3, 4]

shift()

删除并返回数组的第一个元素

1
2
3
4
var arr = [2,3,4,5];
var arr2 = arr.shift();
console.log(arr2); // 删除的数组的第一个元素为:2
console.log(arr); // 删除元素之后的数组为:[3, 4,5]

push()

向数组的末尾添加一个或更多元素,并返回新的长度

1
2
3
4
var arr = [2,3,4,5];
var arr2 = arr.push(6);
console.log(arr2); // 返回的数组长度:5
console.log(arr); // [2, 3, 4, 5, 6]

unshift()

向数组的开头添加一个或更多元素,并返回新的长度

1
2
3
4
var arr = ['xiao','ming','qiqi','aiming'];
var arr1 = arr.unshift('lang');
console.log(arr1); // 返回的数组的长度: 5
console.log(arr); //向数组开头添加元素返回的结果:["lang", "xiao", "ming", "qiqi", "aiming"]

reverse()

颠倒数组中元素的顺序

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

slice()

从某个已有的数组返回选定的元素

1
2
3
4
var arr = [2,3,4,5];
var arr2 = arr.slice(1,3);
console.log(arr2); // 截取区间返回的数组为:[3, 4]
console.log(arr); // [2, 3, 4, 5]

sort()

对数组的元素进行排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 借助排序函数,实现数值由小到大排序
function sortNumber(a,b){
return a - b
}
var arr = [23,30,42,5];
var arr2 = arr.sort(sortNumber);
console.log(arr2); // [5, 23, 30, 42]
console.log(arr); // [5, 23, 30, 42]

// 借助排序函数,实现数值由大到小排序
function sortNumber(a,b){
return b - a
}
var arr = [23,30,42,5];
var arr2 = arr.sort(sortNumber);
console.log(arr2); // [42, 30, 23, 5]
console.log(arr); // [42, 30, 23, 5]

splice()

删除元素,并向数组添加新元素。

1
2
3
4
5
6
7
8
9
// 创建一个新数组,并向其添加一个元素
var arr = [1,2,3,4];
arr.splice(2,0,5);
console.log(arr); // [1, 2, 5, 3, 4]

// 删除位于 index 2 的元素,并添加一个新元素来替代被删除的元素:
var arr = [1,2,3,4];
arr.splice(2,1,5);
console.log(arr); // [1, 2, 5, 4]

toSource()

返回该对象的源代码

1
2
3
4
5
6
7
8
9
10
11
12
// 浏览器支持
// 只有 Gecko 核心的浏览器(比如 Firefox)支持该方法,也就是说 IE、Safari、Chrome、Opera 等浏览器均不支持该方法。
<script type="text/javascript">
function employee(name,job,born){
this.name=name;
this.job=job;
this.born=born;
}
var bill = new employee("Bill Gates","Engineer",1985);
document.write(bill.toSource());
</script>
// 输出:({name:"Bill Gates", job:"Engineer", born:1985})

toString()

把数组转换为字符串,并返回结果

1
2
3
var arr = ['xiao','ming','qiqi','aiming'];
arr.toString();
console.log(arr); // ["xiao", "ming", "qiqi", "aiming"]

toLocaleString()

把数组转换为本地数组,并返回结果

1
2
3
var arr = ['xiao','ming','qiqi','aiming'];
arr.toLocaleString();
console.log(arr); // ["xiao", "ming", "qiqi", "aiming"]

valueOf()

返回数组对象的原始值

1
2
3
var arr = ['xiao','ming','qiqi','aiming'];
arr.valueOf('lang');
console.log(arr); // ["xiao", "ming", "qiqi", "aiming"]

array1

array2

array3

Array部分方法实现

数组元素去重

方法一:

思路:

1. 定义一个 json 对象
2. 遍历数组,将 arr[i] 作为 json 的键
3. 若 不重复,则给对应 arr[i] 的键值为 1 作为后面判断的标识,并 push 到新数组 arr1 中,若重复,则删除
1
2
3
4
5
6
7
8
9
var arr = [1, 2, 3, 2, 1, 5, 6, 3, 3, 2, 1, 7, 9, 8,6]
var arr1 = []
var json = {}
for (var i = 0; i < arr.length; i++) {
if (!json[arr[i]]) {
json[arr[i]] = 1
arr1.push(arr[i])
}
}

方法二:

思路:

  1. 定义一个新数组 arr1
  2. 如果这个新数组中没有这个元素,则 push
1
2
3
4
5
6
7
var arr = [1, 2, 3, 2, 1, 5, 6, 3, 3, 2, 1, 7, 9, 8,6]
var arr1 = []
for (var i = 0; i < arr.length; i++) {
if (arr1.indexOf(arr[i]) < 0) {
arr1.push(arr[i])
}
}

方法三:filter

  1. filter的接收回调,可以有多个参数回调可以接收三个参数,第一个是数组中的元素,第二个是位置,第三个是数组本身
  2. 利用filter过滤器,总是返回元素第一个位置
  3. 去除重复元素依靠的是indexOf总是返回第一个元素的位置,后续的重复元素位置与indexOf返回的位置不相等,因此被filter滤掉了
1
2
3
4
5
var arr = [1, 2, 3, 2, 1, 5, 6, 3, 3, 2, 1, 7, 9, 8,6]
var arr1 = arr.filter(function(ele, index, self) {
return self.indexOf(ele) === index
})
console.log(arr1)

数组最值

方法一:Math.max.apply And Math.min.apply

1
2
3
4
5
6
7
方法一:Math.max.apply
var iMax = 0
var iMin = 0
var arr = [1, 268, 5, 4, 9, 0, 68]
iMax = Math.max.apply(null, arr)
iMin = Math.min.apply(null, arr)
console.log(iMax, iMin)

方法二::Math.max.call And Math.min.call

1
2
3
4
5
6
var iMax = 0
var iMin = 0
var arr = [1, 268, 5, 4, 9, 0, 68]
iMax = Math.max.call(null, 1, 268, 5, 4, 9, 0, 68)
iMin = Math.min.call(null, 1, 268, 5, 4, 9, 0, 68)
console.log(iMax, iMin)

方法三:循环比较

1
2
3
4
5
6
7
8
9
10
11
12
var iMax = 0
var iMin = 0
var arr = [1, 268, 5, 4, 9, 0, 68]
for (var i = 0; i < arr.length; i++) {
if (iMax < arr[i]) {
iMax = arr[i]
}
if (iMin > arr[i]) {
iMin = arr[i]
}
}
console.log(iMax, iMin)

数组排序

sort

原理:在不带参数的情况下sort()方法默认会将数组元素当作string类型来升序排序,根据它们的unicode码从小到大依次排列,如果想按照自己的条件进行排序,需要传一个比较函数

1
2
3
4
5
6
7
8
9
10
11
var arr = [1, 268, 5, 4, 9, 0, 68]
// 从小到大
arr.sort(function (a, b) {
return a - b
})
console.log(arr)
// 从大到小
arr.sort(function (a, b) {
return b - a
})
console.log(arr)

冒泡排序

思路:每次比较相邻的两个数,如果后一个比前一个小,换位置。如果要实现由大到小排序,使用reverse()即可;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var a = [1, 268, 5, 4, 9, 0, 68, 67, 69, 96, 14, 78, 100, 25, 42, 23, 32, 68, 89, 98, 1]
var temp = 0
for (var i = 0; i < a.length; i++) {
for (var j = 0; j < a.length - i; j++) {
if (a[j] > a[j + 1]) {
temp = a[j]
a[j] = a[j + 1]
a[j + 1] = temp
}
}

}
var b = a.reverse()
console.log(a)

快速排序

思路:采用二分法,取出中间数,数组每次和中间数比较,小的放到左边,大的放到右边。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var arr = [1, 268, 5, 4, 9, 0, 68, 67, 69, 96, 14, 78, 100, 25, 42, 23, 32, 68, 89, 98, 1]
function quickSort(arr) {
if(arr.length == 0) {
return []; // 返回空数组
}
var arrL = []
var arrR = []
var index = Math.floor(arr.length / 2)
var arrM = arr.splice(index, 1) // 返回被删除的数
for (var i = 0; i < arr.length; i++) {
if (arrM > arr[i]) {
arrL.push(arr[i])
} else {
arrR.push(arr[i])
}
}
// console.log(arrL.concat(arrR))
return quickSort(arrL).concat(arrM, quickSort(arrR))
}
console.log(quickSort(arr))

数组翻转(非reverse)

方法一

删除数组最后一个元素并返回被删除的元素

1
2
3
4
5
6
7
8
var arr = [1,2,3,4];
var arr2 = [];
while(arr.length) {
var num = arr.pop(); //删除数组最后一个元素并返回被删除的元素
arr2.push(num);
}
console.log(arr2);
// [4, 3, 2, 1]

方法二

删除数组第一个元素并返回被删除的元素

1
2
3
4
5
6
7
var arr = [1,2,3,4];
var arr2 = [];
while(arr.length){
var num = arr.shift(); //删除数组第一个元素并返回被删除的元素
arr2.unshift(num);
}
console.log(arr2);

本文标题:javascript中数组操作

文章作者:王工头

发布时间:2019年01月21日 - 16:24:53

最后更新:2019年01月25日 - 13:28:01

原始链接:https://qqqww.com/javascript中数组操作/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------本文结束感谢大佬们的阅读-------------