<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>数据结构-数组</title>
</head>
<body>
<script>
/*声明数组的方式有:
1、使用new创建,而且可以初始化数组
2、使用中括号声明数组
*/
var arr = new Array("s", "f");
var arr1 = ["a", "b", "c"];
//访问数组
for (var i = 0; i < arr1.length; i++) {
console.log(arr1[i])
}
arr1.map(function(item, key) {
console.log(item)
});
//添加数组
//1、push()方法在数组的尾部添加元素,并且返回数组的新长度,
arr1.push("d");
//2、将元素添加到数组首位
for (var i = arr1.length; i >= 0; i--) {
arr1[i] = arr1[i - 1]
}
arr1[0] = "duxin";
console.log(arr1); //["duxin", "a", "b", "c", "d"]
//unshift()
arr1.unshift("nanjing");
console.log(arr1); //["nanjing", "duxin", "a", "b", "c", "d"]
//删除数组
//1、pop()方法从数组末尾开始删除数组元素
arr1.pop();
console.log(arr1); //["nanjing", "duxin", "a", "b", "c"]
//2、从首位开始删除数组
for (var i = 0; i < arr1.length; i++) {
arr1[i] = arr1[i + 1]
}
console.log(arr1); // ["duxin", "a", "b", "c", undefined]
/**
* 以上的循环体中,把数组所有元素往左移动一个位置,
* 数组的长度没有变化,数组第二位元素的值将第一位覆盖,以此类推
* 数组最后一位变成了未定义元素。
*
* 使用shift()方法可以直接删除数组首位元素,数组的长度发生变化
*/
var arr2 = ["a", "b", "c", "d"]
arr2.shift();
console.log(arr2); //["b", "c", "d"]
//在任意位置添加数组元素或者删除数组元素
var arr3 = ["a", "b", "c", "d", "ee", "ff"];
arr3.splice(0, 2);
console.log(arr3); //["c", "d", "ee", "ff"]
arr3.splice(0, 0, "www");
//在第一位添加元素,第二个参数表示该操作不是删除数组元素
console.log(arr3)
//delete 也可以删除数组,但是他只能删除数组元素的值,并没有改变数组的长度,被///删除的元素变为未定义
var numbers = [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];
var d = numbers.every(function(x) {
return (x % 2 == 0) ? true : false;
});
console.log(d); //false;
//every方法中,需要每一个元素都满足条件才能返回true。必须遍历全部的数组。
var s = numbers.some(function(x) {
return (x % 2 == 0) ? true : false;
})
console.log(s); //ture
//some方法中,只要数组中有一个元素满足条件,就返回true,立即停止遍历数组;
//forEach(),从头到尾遍历数组,为每个元素调用指定的函数。forEach不能像for循环中使用break语句实现提前终止。需要把forEach方法放置在try块中,并抛出一个异常,抛出异常时就会提前终止
numbers.forEach(function(x) {
console.log(x % 2 == 0)
})
//map(),把数组的每一个元素传递给指定的函数,并且返回一个新数组(包含该函数的返回值)。即是针对数组的每一个参数进行操作。
var app = numbers.map(function(x) {
return (x % 2 == 0) ? true : false;
});
console.log(app);
//过滤数组
var nums = numbers.filter(function(item) {
return item % 2 == 0
});
console.log(nums);
//reduce() 和 reduceRight()
//将数组元素进行组合,生成单个值。reduce()需要两个参数,第一个参数是执行操作函数,第二个参数(可选)是一个传递给函数的初始值。
console.log(nums.reduce(function(a, b) {
return a + b
})); //72
//reduceRight() 与reduce() 相似, 只是从右到左的进行处理。
//@@iterator属性
var num = [0, 2, 4, 6, 8, 10, 12, 14, 16];
var iterator = nums[Symbol.iterator]();
console.log(iterator.next().value); //0
console.log(iterator.next().value); //2
//values
var _values = num.values();
console.log(_values.next()); //{value: 0, done: false}
console.log(_values.next());
//entries
var _entries = num.entries();
console.log(_entries.next()); //[0,0]
//keys
var _keys = num.keys();
console.log(_keys.next());
console.log(_keys.next());
console.log(_keys.next());
//Array.from根据已有的数组创建一个新数组,比如复制数组num
var newNum = Array.from(num);
console.log(newNum); //[0, 2, 4, 6, 8, 10, 12, 14, 16]
//Array.of,根据传入的参数创建一个数组
var arrItem = Array.of(1, 2, 3, 5, 4, 6, 9);
console.log(arrItem); //[1, 2, 3, 5, 4, 6, 9]
//fill用静态值填充数组
//第一个参数表示要填充的静态值,第二个参数是被填充数组的起始位位置,第三个参数是被填充的末尾位置
arrItem.fill(9, 2);
console.log(arrItem); //[9, 9, 9, 9, 9, 9, 9]
//copyWithin,第一个参数是被复制元素放置的起始位置,第二参数是需要复制的元素的起始位置
var arrCopy = num.copyWithin(7, 3, 5);
console.log(arrCopy); //[0, 2, 4, 6, 8, 10, 12, 6, 8]
//反序输出数组
console.log(num.reverse()); //[8, 6, 12, 10, 8, 6, 4, 2, 0]
//sort(),把数组中元素默认成字符串进行比较排序返回排序后的数组(一般是按照正序排序),也可以自定义排序的方式
console.log(num.sort()); //[0, 10, 12, 2, 4, 6, 6, 8, 8]
function arr12(element) {
return (element % 12 != 0) ? true : false;
}
console.log(num.find(arr12)); //10
console.log(num.findIndex(arr12)); //1
console.log(num.includes(10, 0)); //true
console.log(num.toString())
</script>
</body>
</html>