js的数组学习笔记

***数组是特殊类型的对象
对数组使用typeof会返回object 所以识别数组不使用这种方法 使用

Array.isArray(car);    

数组和对象的区别
在 JavaScript 中,数组使用数字索引。
在 JavaScript 中,对象使用命名索引。
数组是特殊类型的对象,具有数字索引。***
首先JS的数组不能通过==或===来比较两个数组是否完全一样
如果要比较两个数组是否完全一样,需要把数组转化为字符串
如:

s1.toString()==s2.toString();
     s1.toString===s2.toString;

或者

stack1.join("")==stack2.join("")
stack1.join("")===stack2.join("")

如果想要比较两个数组的元素是否相同,但顺序可以不一致,可以先对数组进行排序,再对排序后的数组转化为字符串比较

s1.sort.toString()==s2.sort.toString()

1.数组的创建

var cars = ["Saab", "Volvo", "BMW"];

var cars = new Array("Saab", "Volvo", "BMW");

2.访问数组
可以通过索引号来访问数组,也可以通过数组名来访问完整的数组

document.getElementById("demo").innerHTML = cars[0]; 
document.getElementById("demo").innerHTML = cars; 

3.数组长度 length
car.length
4.push与pop(类似于栈)
push方法返回的是字符串的长度,pop方法返回的是被弹出的数

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.push("Lemon");                // 向 fruits 添加一个新元素 (Lemon)
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var x = fruits.pop();      // x 的值是 "Mango"

5.shift()和unshift()
shift位移与弹出等同,但处理首个元素而不是最后一个。
shift() 方法会删除首个数组元素,并把所有其他元素“位移”到更低的索引。

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.shift();            // 从 fruits 删除第一个元素 "Banana"并返回该元素

unshift() 方法(在开头)向数组添加新元素,并“反向位移”旧元素:

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.unshift("Lemon");    // 向 fruits 添加新元素 "Lemon"并返回新字符串的长度

6.delete删除方法

var fruits = ["Banana", "Orange", "Apple", "Mango"];
delete fruits[0];           // 把 fruits 中的首个元素改为 undefined

使用 delete 会在数组留下未定义的空洞。请使用 pop() 或 shift() 取而代之。
7.splice()方法

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.splice(2, 2, "Lemon", "Kiwi");

第一个参数(2)定义了应添加新元素的位置(拼接)。
第二个参数(2)定义应删除多少元素。
其余参数(“Lemon”,“Kiwi”)定义要添加的新元素。
splice() 方法返回一个包含已删除项的数组:
原数组:
Banana,Orange,Apple,Mango
新数组:
Banana,Orange,Lemon,Kiwi
已删除项:
Apple,Mango
8.合并(连接)数组

concat() 方法通过合并(连接)现有数组来创建一个新数组:
var arr1 = ["Cecilie", "Lone"];
var arr2 = ["Emil", "Tobias", "Linus"];
var arr3 = ["Robin", "Morgan"];
var myChildren = arr1.concat(arr2, arr3);   // 将arr1、arr2 与 arr3 连接在一起

concat() 方法不会更改现有数组。它总是返回一个新数组。
concat() 方法可以使用任意数量的数组参数。
9.裁剪数组
slice() 方法用数组的某个片段切出新数组。
slice() 可接受两个参数,比如 (1, 3)。
该方法会从开始参数选取元素,直到结束参数(不包括)为止。

var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
var citrus = fruits.slice(1, 3); 

结果是:Orange,Lemon
如果结束参数被省略,比如第一个例子,则 slice() 会切出数组的剩余部分

var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
var citrus = fruits.slice(2); 

结果是
Lemon,Apple,Mango

var fruits = ["Banana", "Orange", "Apple", "Mango"];
document.getElementById("demo").innerHTML = fruits.toString(); 

结果是Banana,Orange,Apple,Mango
10.把数组转换为字符串
JavaScript 方法 toString() 把数组转换为数组值(逗号分隔)的字符串。
join() 方法也可将所有数组元素结合为一个字符串。它的行为类似 toString(),但是您还可以规定分隔符:

var fruits = ["Banana", "Orange","Apple", "Mango"];
document.getElementById("demo").innerHTML = fruits.join(" * "); 

结果是Banana * Orange * Apple * Mango

11.数组排序
sort() 方法以字母顺序对数组进行排序:

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();            // 对 fruits 中的元素进行排序

Apple,Banana,Mango,Orange
12.反转数组
reverse() 方法反转数组中的元素。
您可以使用它以降序对数组进行排序:

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();            // 对 fruits 中的元素进行排序
fruits.reverse();         // 反转元素顺序

Orange,Mango,Banana,Apple

13.数字排序
默认地,sort() 函数按照字符串顺序对值进行排序。该函数很适合字符串(“Apple” 会排在 “Banana” 之前)。不过,如果数字按照字符串来排序,则 “25” 大于 “100”,因为 “2” 大于 “1”。正因如此,sort() 方法在对数值排序时会产生不正确的结果。我们通过一个比值函数来修正此问题:

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});

1,5,10,25,40,100
使用相同的技巧对数组进行降序排序:

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a}); 

100,40,25,10,5,1
14.以随机顺序排序数组

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return 0.5 - Math.random()}); 

15.对数组使用 Math.max()
您可以使用 Math.max.apply 来查找数组中的最高值:

function myArrayMax(arr) {
    return Math.max.apply(null, arr);
}

Math.max.apply([1, 2, 3]) 等于 Math.max(1, 2, 3)。

function myArrayMin(arr) {
    return Math.min.apply(null, arr);
}

Math.min.apply([1, 2, 3]) 等于 Math.min(1, 2, 3)。
15.排序对象数组

var cars = [
{type:"Volvo", year:2016},
{type:"Saab", year:2001},
{type:"BMW", year:2010}];
cars.sort(function(a, b){return a.year - b.year});

比较字符串属性会稍复杂:

cars.sort(function(a, b){
	  var x = a.type.toLowerCase();
	  var y = b.type.toLowerCase();
	  if (x < y) {return -1;}
	  if (x > y) {return 1;}
	  return 0;
});

16.数组的遍历
Array.forEach()
forEach() 方法为每个数组元素调用一次函数(回调函数)。

var txt = "";
var numbers = [45, 4, 9, 16, 25];
numbers.forEach(myFunction);

function myFunction(value, index, array) {
  txt = txt + value + "<br>"; 
}

注释:该函数接受 3 个参数:

项目值
项目索引
数组本身
所有浏览器都支持 Array.forEach(),除了 Internet Explorer 8 或更早的版本
17.Array.map()
map() 方法通过对每个数组元素执行函数来创建新数组。
map() 方法不会对没有值的数组元素执行函数。
map() 方法不会更改原始数组。
这个例子将每个数组值乘以2:

var numbers1 = [45, 4, 9, 16, 25];
var numbers2 = numbers1.map(myFunction);

function myFunction(value, index, array) {
  return value * 2;
}

请注意,该函数有 3 个参数:

项目值
项目索引
数组本身
所有浏览器都支持 Array.map(),除了 Internet Explorer 8 或更早的版本
18.Array.filter()
filter() 方法创建一个包含通过测试的数组元素的新数组。

这个例子用值大于 18 的元素创建一个新数组:

var numbers = [45, 4, 9, 16, 25];
var over18 = numbers.filter(myFunction);
function myFunction(value, index, array) {
  return value > 18;
}

所有浏览器都支持 Array.filter(),除了 Internet Explorer 8 或更早的版本
19.reduce() 方法在每个数组元素上运行函数,以生成(减少它)单个值。

reduce() 方法在数组中从左到右工作。另请参见 reduceRight()。

reduce() 方法不会减少原始数组。

这个例子确定数组中所有数字的总和:

var numbers1 = [45, 4, 9, 16, 25];
var sum = numbers1.reduce(myFunction);

function myFunction(total, value, index, array) {
  return total + value;
}

结果:99
请注意此函数接受 4 个参数:

总数(初始值/先前返回的值)
项目值
项目索引
数组本身
reduce() 方法能够接受一个初始值:

var numbers1 = [45, 4, 9, 16, 25];
var sum = numbers1.reduce(myFunction, 100);

function myFunction(total, value) {
  return total + value;
}

结果是:199

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值