权威指南学习心得-数组

所有的索引都是属性名,但是只有在0~2(32)-2之间的整数属性名才是索引,所有的数组都是对象,可以为其创建任意名字的属性。但如果使用的属性是数组的索引,数组的特殊行为就是将根据需要更新它们的length属性值。

数组的添加:

1、通过索引赋值

var a=[];
a[0]="zero";
a[1]="one";

2、使用push方法在数组末尾增加一个或者多个元素

var a=[];
a[0]="zero";
a[1]="one";
a.push("three");
a.push("four","five");
console.log(a);

在数组尾部压入一个元素,还可以使用a[a.length]赋值

a[a.length]="seven";

unshift在数组的首部插入一个元素,并且将其他元素依次移到更高的索引处

delete删除数组元素和为其赋值undefined值类似,对一个数组元素使用delete不会修改数组的length属性,也不会将元素从高索引处移下来填充已经删除属性的空白

var a=[1,2,3];

delete a[1];
console.log(a[1]);//undefined
console.log(1 in a);//false
console.log(a.length);//3

pop 一次使减少长度1并返回被删除的元素

shif 从数组头部删除一个元素。和delete不同的是shift方法将所有元素下移到比当前索引低1的地方

splice是一个通用的方法来插入、删除、替换数组元素,它会根据需要修改length属性并移动元素到更高或者较低的索引处

数组遍历

var a={x:1,y:2};
var keys=Object.keys(a);
var values=[];
for(var i=0,len=ksys.length;i<len;i++){

  var key=keys[i];
  value[i]=a[key];
}
//如果要排除null undefined 和不存在的元素
for(var j=0;j<a.length;j++){

  if(!a[i]) continue;

}
//只想跳过undefined和不存在的元素

for(var m=0;m<a.length;m++){

  if(a[m]===undefined) continue;

}

//如果只想跳过不存在的元素而仍然要处理存在的undefined元素
for(var n=0;n<a.length;n++){

  if(!(n in a)) continue;

}

for/in可用循环处理稀疏数组。循环每次将一个可枚举的属性名(包括数组索引)赋值给循环变量。不存在的索引将不会遍历到

for(var index in sparseArray){

var vaule=sparseArray[index]

}

注意上面可以循环可枚举继承的属性名,所以一般不用

除非先过滤

for(var i in a){

  if(!a.hasOwnProperty(i)){//跳过继承属性
    continue;
  }

}
for(var i in a){//跳过不是非负整数的i
  if(String(Math.floor(Math.abs(Number(i))))!==i){
    continue;
  }

}

按照索引的顺序按个传递给定义的一个函数

var data=[1,2,3,4,5];
var sum=0;
data.forEach(function(x){
console.log(x*x);
});

Array.join方法将数组中所有元素都转化为字符串并连接在一起,可以指定一个可选的字符串在生成的字符串中来分隔数组的各个元素,如果不指定分隔符,默认使用逗号。

var data=[1,2,3,4,5];
console.log(data.join());//1,2,3,4,5
console.log(data.join(" "));//1 2 3 4 5
console.log(data.join(""));//12345
var b=new Array(10);
console.log(b.join("-"));//---------

reverse 将数组中的元素颠倒顺序,返回逆序的数组

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

sort 当不带参数调用方法时,元素以字母表顺序排序(如有必要将临时转化为字符串比较),如果数组包含undefined元素,它们会被排到数组的尾部

给sort方法传递一个比较函数。该函数决定了它的两个参数在排好序的数组中的先后顺序。假设第一个参数应该在前,比较函数应该返回一个小于0的数值.反之,假设第一个参数应该在后,函数应该返回一个大于0的数值,并且,假设两个值相等,函数应该返回0

var a=[33,44,1111,222];

console.log(a.sort());//[1111, 222, 33, 44]
console.log(a.sort(function(a,b){//[33, 44, 222, 1111]
  return a-b;
}));
console.log(a.sort(function(a,b){//[1111, 222, 44, 33]
  return b-a;
}));

字符串数组执行不区分大小写的字母表排序

var test=["ant","But","cat","Dog"];

console.log(test.sort());//["But", "Dog", "ant", "cat"]
console.log(test.sort(function(s,t){//["ant", "But", "cat", "Dog"]
  var a=s.toLowerCase();
  var b=t.toLowerCase();
  if(a<b) return -1;
  if(a>b) return 1;
  return 0;

}));

concat  他的元素包括调用concat的原始数组的元素和concat的每个参数。如果这些参数中的任何一个自身是数组,则连接的是数组的元素而非数组本身,但要注意。concat不会递归扁平化数组的数组。也不会修改调用的数组。

var test=[1,2,3];
console.log(test.concat(4,5));//[1, 2, 3, 4, 5]
console.log(test.concat(4,[5,6]));//[1, 2, 3, 4, 5, 6]

console.log(test.concat([4,5]));//[1, 2, 3, 4, 5]

console.log(test.concat([4,5],[6,7]));//[1, 2, 3, 4, 5, 6, 7]

console.log(test.concat(4,[5,[6,7]]));//[1, 2, 3, 4, 5, [6,7]]

slice 同字符串的截取一样 返回的数组包含第一个参数指定的位置和所有到但不含第二个参数指定的位置之间的所有数组元素,如果参数中出现负数,它表示相对于数组中最后一个元素的位置,不会修改调用的数组

splice()的第一个参数指定了插入和(或)删除的起始位置,第二个参数指定了应该从数组中删掉的元素的个数,如果省略第二个参数,从起始点开始到数组中结尾的所有元素都将被删除。splice返回一个由删除元素组成的数组,或者如果没有则返回空数组

splice的前两个参数指定了需要删除的数组元素,紧随其后的任意个数的参数指定了需要插入到数组中的元素,从第一参数指定的位置开始插入

var a=[1,2,3,4,5];
a.splice(2,0,‘a‘,‘b‘);
console.log(a);//[1, 2, "a", "b", 3, 4, 5]
a.splice(2,2,[1,2],3);
console.log(a);//[1, 2, [1,2], 3, 3, 4, 5]

注意,区别于concat,splice会插入数组本身而非数组的元素。

push方法在数组的尾部添加一个或者多个元素,并返回数组新的长度

pop则相反,它删除数组的最后一个元素,减少数组长度并返回它删除的值

两个方法都修改并替换原始数组而非生成一个修改新的数组

unshift在数组的头部添加一个或者多个元素,并将已存咋的元素移动到更高索引的位置来获得足够的空间,最后返回数组新的长度

shift删除数组的第一元素并将其返回,然后把所有随后的元素下移一个位置来填补数组头部的空缺

注意。当使用多个参数调用unshift时他的行为令人惊讶。参数是一次性插入的(像splice)而非一次一个 的插入。这意味着最终的数组中插入的元素的顺序和他们在参数列表中的顺序一致。假如元素是一次一个的插入,他们的顺序应该是反过来的。

数组的toString(),该方法将其每个元素转化为字符串(如有必要将调用元素的toString()方法)并且输出用逗号分隔的字符串列表,输出不包括方括号或者其他形式的包裹数组值的分隔符

console.log([1,2,3].toString());//1,2,3
console.log(["a","b","c"].toString());a,b,c
console.log([1,[2,"c"]].toString());//1,2,c
console.log([1,{x:2}].toString());//1,[object Object]

注意,这里与不使用任何参数调用join()方法返回的字符串是一样的。

时间: 2024-11-01 11:12:02

权威指南学习心得-数组的相关文章

权威指南学习心得-对象

对象的属性特性: 1.可写(writable) 2.可枚举(enumerable) 3.可配置configurable 对象特性: 1.对象的原型(prototype) 2.对象的类(class) 3.对象的扩展标记 对象的种类 1.内置对象(数组.函数.日期和正则表达式) 2.宿主对象 htmlelement 3.自定义对象 属性的种类 自有属性 继承属性 原型: 每一个js对象(null和Object.prototype除外)都和另一个对象相关联,每一个对象都从原型继承属性 对象直接量({}

权威指南学习心得-语句

函数 //递归函数 function factorial(n){ if(n<=1){ return 1; } else { return n*arguments.callee(n-1); } } console.log(factorial(4));//24 函数作用域是指函数内声明的所有变量在函数体内始终是可见的,意味着变量在声明之前甚至已经可用,被称为声明提前,即函数里所有声明的所有变量(但不涉及赋值)都被提前至函数的顶部 全局变量在程序中始终都是有定义的.局部变量在声明它的函数体内以及其所嵌

权威指南学习心得之运算符和表达式

1.数组 数组直接量中的列表逗号之间的元素可以忽略,这是省略的空位自动填充值undefined,元素列表结尾处可以留下单个逗号,这时并不会创建一个新的值undefined 2.操作符 属性访问和函数调用排在最高级 一元操作符.赋值.三元条件运算符都具有从右到左的结合特性. + 加法运算符的转换规则优先考虑字符串连接,如果其中一个操作数是字符串或者转换为字符串的对象,则另外一个操作数也转换为字符串,加法将进行字符串的连接操作.如果两个操作数都不是类字符串,那么将进行算术加法运算 1.如果其中一个操

权威指南学习心得

1.数据类型 数字 布尔 字符串 undefined null 对象 2.对象 普通对象:命名值的无序集合: 由构造函数初始化的对象组成的集合 特殊对象:1.数组对象(Array)带编号的值的有序集合 2.函数对象(Function) 3.日期对象(Date) 4.正则表达式对象(RegExp) 5.错误类(Error) 3.null和undefined无法拥有方法 4.不在任何函数内声明的变量叫做全局变量 在函数内声明的变量具有函数作用域,并且只在函数内可见 5. 常用Math对象的方法 Ma

权威指南学习心得-浏览器中的js

window对象:表示web了浏览器的一个窗口或窗体(winow属性引用自身) 含有以下属性:location包含Location对象,指定当前显示在窗口中URL,允许脚本往窗口里载入新的URL 含有以下方法: alert(),setTimeout(): document属性 引用Document对象,后者表示显示在窗口中的文档,它包含有一些重要方法,比如getElementById(),返回Element对象,这个对象有其它重要的属性和方法.每个Element对象都有style和classNa

权威指南学习心得-类

构造函甚至不必返回这个新创建的对象,构造函数会自动创建对象,然后将构造函数当作为这个对象的方法来调用一次,最后返回这个新对象. 任何javascript函数都可以用作构造函数,并且调用构造函数是需要用到一个prototype属性的.因此,每个javascript函数(除了ecmascript 5中的Function.bind方法返回的函数之外)都自动拥有一个prototype属性.这个属性的值是一个对象.这个对象包含唯一一个不可枚举属性constructor.constructor属性的值是一个

JavaScript权威指南学习笔记之一

1.关于分号 javascript里面不强制使用分号来表示一行语句的结束,但是最好能够在写js之前,特别是在原有的js上面新增时,最好前置一个分号.避免这种情况发生:  2.JavaScript类型转换 3.关于=== ①如果类型不同则不等 ②null===null或undefined===undefined ③true===true或false===false ④NaN不等 ⑤0===0 0===-0 ⑥如果是同一个object,array,function则相等 4.关于== ①如果已经==

MongoDB权威指南学习笔记4---查询相关的知识点

1 find find({查询条件},{"key":1,"email":1})  后面表示返回哪些键 2 可用的比较操作符 $lt , $lte,$gt,$gte 比如db.users.find({"age":{"$gte":18,"$lte":30}}) 3不等于 find(...{"key":{"$ne":"value"}} 4 in find

Git权威指南学习笔记(一)Git初始化

1.在Git中配置用户名和邮件地址 $ git config --global user.name "Jymn_Chen" $ git config --global user.email "[email protected]" 注意把用户名和邮件地址替换成你自己的资料. 在这里的参数global表示配置的作用范围是当前用户,如果将参数改为system,那么配置的作用范围是系统中的所有用户. 2.创建版本库 新建一个目录并cd到目录中,执行以下命令: $ git i