day4
数组
①数组
概念:一组数据。(通常情况下,数据类型要保持一个,而JS允许不同数据类型)
②创建方式
var a = new Array(arg);//arg为数组长度,但打印数组时只显示已填充内容
var a = new Array("xxx","xxx",10);//直接写出数据,JS自动识别,将数据覆盖参数
③数组长度可变
在普通编程语言中,数组长度不可变,但在JS中可以动态改变。
也就是说,在JS中添加和删除元素,不需要关心长度,它会自动变化。
JS中,没有下标越界的概念,超出长度的下标所指向的数据为undefined
④数组检测
var a = new Array();
var b = 1;
console.log( a instanceof Array );//true
console.log( b instanceof Array );//false
⑤数组为什么是Object?
var a = [];
a[0] = 1;
a[1] = 2;
a["name"] = "ZYC";
console.log( a );// [1,2,name: "ZYC"];
数组的本质: 对象;
对象的本质: Hash;
Hash的本质: 数组;
---------------》JS基于对象
什么是Hash?
加密:按照一定的规则将原文转换,这个规则不公开,则为加密
加密规则:必须保证不同的原文,转换出不同的密文,反之亦然。
MD5/SSH
Hash表:对于键值对,将key使用一个Hash算法,计算出一个下标,指向这个键值对;再进行key的查询时,便使用之前的Hash算法将下标计算出来,直接取值。
JS中数组的本质:
//[key: value, key; value]
var arr1 = new Array();
var arr2 = new Object;
arr1[0] = arr2[0] = 1;
arr1["name"] = arr["name"] = "XWS";
arr1["age"] = arr[2] = 20;
//上述赋值都成立
⑥for-in循环
var arr = new Array(1,2,3);
for ( let i = 0; i < arr.length; i ++) console.log( arr[i] );
for ( let arg in arr ) console.log( arr[arg] );
//两种方法输出没有区别
var arr = new Object();
arr.name = "XWS";
arr.age = "21";
arr.city = "CQ";
for ( let arg in arr ) {console.log( arg + ":"); console.log( arr[arg] );}//前者输出属性名,后者输出属性值,即属性名可以作下标。
数组的json:
var arr = new Array(1,2,3);
//arr的结构就是 { 0: 1, 1: 2, 2: 3 }
//注意!
console.log( arr == { 0: 1, 1: 2, 2: 3 } );//false
//因为对象在内存中是通过访问其在堆内存中的地址来引用的,所以即便是两个结构和属性值一模一样的对象,只要不是同一个对象,就不相等。也就是说,对象的比较,就是比较对对象的引用。
⑦常见的数组API
//添加一个元素
var arr = new Array(1,2,3);
arr.push(4);//在数组末尾推入一个元素
arr.pop;//在末尾获取并删除
arr.unshift(0);//在数组开头插入一个元素
arr.shift(0);//在开头获取并删除
arr.join("#");//将数组按#分割合并成字符串
⑧排序,排序!
var arr = [1,4,2,55,67,5,34,23,0,3];
//冒泡排序
var arr1 = arr;
for ( let i = 0; i < arr1.length; i ++){
for ( let j = 0; j < arr1.length-1-i; j ++) {
if ( arr1[j] > arr1[j+1] ) {
var temp = arr1[j];
arr1[j+1] = arr1[j];
arr1[j] = temp;
}
}
}
console.log( arr1 );
//选择排序
var arr2 = arr;
for ( let i = 0; i < arr2.length; i ++) {
for ( let j = i+1; j < arr2.length; j ++) {
if ( arr2[i] > arr2[j] ) {
var temp = arr2[i];
arr2[i] = arr2[j];
arr2[j] = temp;
}
}
}
console.log( arr2 );
//快速排序
var arr3 = arr;
function quickSort( arr ) {
if ( arr.length <= 1 ) return arr;
var midIndex = parseInt( arr.length/2 );//取中间值,下标取整
var midVal = arr[ midIndex ];
var left = new Array();
var right = new Array();
for ( let i = 0; i < arr.length; i ++) {
if ( i == midIndex ) continue;
else {
if ( arr[i] > midVal ) right.push( arr[i] );
else left.push( arr[i] );
}
}
return quickSort( left ).concat ( midVal, quickSort( right ) );
}
var result = quickSort( arr3 );
console.log( result );
//插入排序
var arr4 = arr;
function insertSort( arr ) {
for ( let i = 1; i < arr.length; i ++) {
searchiIndex ( arr, i, arr[i] );
}
return arr;
}
function searchIndex( arr, index, value ) {
for ( let i = 0; i < index-1; i ++) {
if ( value < arr[i] ) { insertIndex( arr, i-1, value, index );return arr; }
}
}
function insertIndex( arr, index, value, valueIndex ) {
for ( let i = valueIndex-1; i > index; i --) {
arr[i+1] = arr[i];
}
arr[index] = value;
}
console.log( insertSort( arr ) );

浙公网安备 33010602011771号