JavaScript数组

2018-04-11  本文已影响0人  54黄药师

一、JavaScript中数组的定义

二、数组的操作

1. 创建数组

var numbers = [];
// 当传入一个数字类型的参数时,表示数组的长度,其他则表示数组的元素。
var numbers = new Array();

这两种方式推荐使用方式一,因为这种方式效率更高。

2. 读写数组

一般使用 [] 操作符

3. 由字符串生成数组

split() 方法:

var str = 'hello world javascript css html';
var words = str.split(' '); // words为一个数组

4. 对数组的整体操作

4.1 将一个数组赋值给另一个数组

改操作只是给被赋值的数组增加了一个新的引用,其实两个变量指向的是一个数组,两者的操作是相互影响的。通常被称为“浅复制”。
如何实现深复制:

// 将arr1深复制给arr2
function copy (arr1,arr2) {
  for (var i = 0; i < arr1.length; i++) {
    arr2[i] = arr1[i]
  }
}

拓展:如何实现一个对象的深复制?

function copyObj (obj1, obj2) {
  var obj2 = obj2 || {};
  for (item in obj1) {
    if (typeof item === 'object') {
      obj2[item] = (obj1[item].constructor === Array):[]?{}; // 判断属性是否为对象或是数组
      copyObj(obj1[item], obj2[item]);
    }else{
      obj2[item] = obj1[item]
    }
  }
  return obj2;
}

5. 存取操作

5.1 查找匹配元素
5.1.1 indexOf():
var names = ['huangjin','qq','jack','hellen'];
var postion = names.indexOf('qq')
console.log(postion); // 1
5.1.2 slice():
5.2 数组的字符串表示
5.2.1 toString():
var names = ['huangjin','qq','jack','hellen'];
console.log(names.toString()); 
5.2.2 join():
console.log(names.join('-')); // huangjin-qq-jack-hellen
5.3. 由已有数组创建新的数组
5.3.1 concat():
console.log(names.concat(['aaa','bbb']));
VM629:1 (6) ["huangjin", "qq", "jack", "hellen", "aaa", "bbb"]

console.log(names.concat(['aaa','bbb'],'ccc'));
VM631:1 (7) ["huangjin", "qq", "jack", "hellen", "aaa", "bbb", "ccc"]

console.log(names.concat(['aaa','bbb'],'ccc',123));
VM633:1 (8) ["huangjin", "qq", "jack", "hellen", "aaa", "bbb", "ccc", 123]

5.3.2 splice(n,m):
names = ['a','b','c','d','e'];

console.log(names.splice(1,2));
VM837:1 (2) ["b", "c"]

console.log(names);
VM839:1 (3) ["a", "d", "e"]

console.log(names.splice(1));
VM841:1 (2) ["d", "e"]

console.log(names);
VM843:1 ["a"]

console.log(names.splice());
VM845:1 []

console.log(names);
VM847:1 ["a"]

拓展:splice可以用于增加和删除数组元素,删除操作跟上面一样,只是这是删除是相对于原数组,而上面的是相对于返回值。所以删除就不做介绍,这里主要讲解一下新增元素。如下:

names = ['a','b','c']

console.log(names.splice(1,0,'d'));
VM928:1 []

console.log(names);
VM953:1 (4) ["a", "d", "b", "c"]

6. 可变函数

JavaScript的数组的可变函数主要是用来在不引用数组中某个元素的情况下,改变数组内容。

6.1 从数组的首尾添加元素
6.1.1 push():
var names = ['a','b','c']

names.push('d')
4
console.log(names)
VM297:1 (4) ["a", "b", "c", "d"]
6.1.2 unshift():
console.log(names)
VM297:1 (4) ["a", "b", "c", "d"]

console.log(names.unshift(1));
VM351:1 5

console.log(names)
VM353:1 (5) [1, "a", "b", "c", "d"]
6.2 从数组的首尾删除元素
6.2.1 pop():
6.2.2 shift():
6.3 从数组的中间位置添加和删除元素

splice():

6.4 数组排序
6.4.1 reverse():
6.4.2 sort():
function compare(a,b) {
  return a-b; // 如果为正,按升序,为0位置不变,为负则按降序
}
var nums = [1,2,5,3,55,43,4];
nums.sort(compare);

7. 迭代器方法

7.1 不生成新数组的迭代器方法

即,不产生任何新的数组,要么对于数组中的每个元素执行某种操作,要么返回一个值。

7.1.1 forEach():
console.log(names)
VM586:1 (5) [1, "a", "b", "c", "d"]

console.log(names.forEach(function(a){console.log('f'+a)}));
VM624:1 f1
VM624:1 fa
VM624:1 fb
VM624:1 fc
VM624:1 fd
VM624:1 undefined

console.log(names)
VM626:1 (5) [1, "a", "b", "c", "d"]
7.1.2 every():
var nums = [1,2,3,4,5]

nums.every(function(i){if(i>0){return true}});
true
nums.every(function(i){if(i>1){return true}});
false
7.1.3 some():
7.1.4 reduce():
var numbers = [65, 44, 12, 4];
 
function getSum(total, num) {
    return total + num;
}
function myFunction(item) {
    console.log(numbers.reduce(getSum));
}
7.2 生成新数组的迭代器方法
7.2.1 map():
var numbers = [4, 9, 16, 25];

function myFunction() {
    console.log(numbers.map(Math.sqrt));
}
7.2.2 filter():

三、总结

上一篇 下一篇

猜你喜欢

热点阅读