JavaScript的进阶之路(五)理解数组2
数组方法
//定义一个测试数组
var array1 = [1,2,5,null,"a"]; //join()方法是String.split()方法的逆操作,后者是将字符串分割成若干块来创建一个数组。
console.log(array1.join(",")); // 1,2,5,,a //返回逆序的数组,不改变原数组,原理是替换(意思是不是重新排列元素创建新的数组,而是在原先的数组中重新排列元素)
console.log(array1.reverse()); // ["a",null,5,2,1]
array1.reverse();
console.log(array1); // [1,2,5,null,"a"] 原数组不变 //将数组的元素排序并返回排序后的数组。改变原数组。
console.log(array1.sort()); // [1,2,5,"a",null]
array1.sort(function(a,b){
return a-b;
});
console.log(array1); // [1,2,5,"a",null] 原数组为排序后的数组
//针对数组元素全是字符串 不区分大小写的排序
var array2 = ["a","C","dog","case","Dog"];
console.log(array2.sort()); //["C", "Dog", "a", "case", "dog"] 区分大小写
array2.sort(function(s,t){
var a = s.toLowerCase();
var b = t.toLowerCase();
if(a<b) return -1;
if(a>b) return 1;
return 0;
});
console.log(array2);// ["a", "C", "case", "Dog", "dog"] 不区分大小写 //concat()创建并返回一个新数组 ,原数组不变
console.log(array1.concat([4,6],7,[8,[9,10]]));
console.log(array1); //不改变原数组 [1,2,5,"a",null] //截取数组元素,返回截取元素组成的数组。原数组不变
console.log(array1.slice(1,3)); //[2,5]
console.log(array1.slice(1,-1)); //[2, 5, "a"]
console.log(array1); //[1, 2, 5, "a", null] //插入 删除 修改数组。返回由删除元素组成的数组。 并改变原数组
console.log(array1.splice(1,3)); //[2,5,"a"]
console.log(array1); //[1,null]
console.log(array1.splice(0,2,"b","c")); // 返回删除的 [1,null]
console.log(array1); // ["b","c"] console.log(array1.push("d")); //3 返回的数组的 长度 改变原数组
console.log(array1.pop()); // d 返回删除的的元素 String 改变原数组
console.log(array1.unshift("a")); // 3 返回数组的长度 改变原数组
console.log(array1.shift()); // a 返回删除的的元素 String 改变原数组
console.log(array1.toString());
console.log(array1.toLocaleString()); //ECMAScript5数组中的方法
var data=[1,2,3,4,5];
var sum=0;
data.forEach(function(value){sum+=value});
console.log(sum); //
data.forEach(function(v,i,a){return a[i]=v+1})
console.log(data); //[2,3,4,5,6]
var data1=data.map(function(x){return x*x});//map()方法将调用数组的每个元素,传递给指定函数,返回一个新数组
console.log(data1); //[4,9,16,25,36]
var data2=data.filter(function(x){return x<4});
console.log(data2); //[2,3]
var data3=data.filter(function(x){return x%2==0}); //获取偶数元素
console.log(data3);//[2,4,6]
var data4=data.filter(function(x,i){return i%2!=0}); //获取下标为单数的的元素
console.log(data4);//[3,5]
var bool1=data.every(function(x) {return x<5}); //所有的值都小于5吗?
var bool2=data.some(function(x){return x>5}); //有大于5的值吗吗?
console.log(bool1+" "+bool2);
var num1 = data.reduce(function(x,y){ return x+y},0);
var num2 = data.reduce(function(x,y){ return x*y},1);
var num3 = data.reduce(function(x,y){ return (x>y)?x:y});
console.log(num1+" "+num2+" "+num3);
var num4=data.indexOf(2);
var num5 = data.lastIndexOf(3);
var num6 = data.indexOf(9);
console.log(num4); //indexOf()方法返回的是值得下标
console.log(num5);
console.log(num6); //不存在返回-1,可以判断数组中是否含有某个元素 //在数组中查找所有x,并返回索引下标
function findx(a,x){
var result = [],len=a.length,pos=0;
while(pos<len){
pos= a.indexOf(x,pos);
if(pos===-1) break;
result.push(pos);
pos += 1;
}
return result;
}
var findxArray = [1,2,3,4,1,5,1];
console.log(findx(findxArray,1));
数组类型
console.log(Array.isArray(data)); //ECMAScript5中检测是否为数组的方法
//自定义检测数组方法,实际上是实现isArray方法
var isArray = Function.isArray || function(o){
return (typeof o)==="object" && Object.prototype.toString.call(o) ==="[object Array]";
}
console.log(isArray(data));
类数组对象:函数的Arguments对象实际上是一个类数组对象,document.getElementsByTagName()也返回一个类数组对象
作为数组的字符串:字符串也有 str.charAt(0) str[1];
JavaScript的进阶之路(五)理解数组2的更多相关文章
- JavaScript的进阶之路(五)理解数组1
数组是值得有序结合,每个值叫做一个元素,每个元素的位置称为索引,索引从0开始. 在JavaScript中,数组是对象的特殊形式.继承自Array.prototype中的属性,有丰富的数组操作方法. 通 ...
- JavaScript的进阶之路(六)理解函数
函数:定义一次,多次调用:用于对象的属性则称为对象的方法:在JavaScript中,函数即对象:嵌套的函数形成闭包: 定义函数和简单调用函数: //函数定义 function f1(){ //没有参数 ...
- JavaScript的进阶之路(四)理解对象2
对象的三个属性 原型属性 1.var v={}的原型是Object.prototype;继承了一个constructor属性指代Object()构造函数,实际的原型是constructor.proto ...
- JavaScript的进阶之路(四)理解对象1
对象是JavaScript的基本数据类型.简单的名值对组成了对象,BUT:还可以从一个被称为原型的对象继承属性,对象的方法通常就是继承的属性. 对象最常见的用法有:创建.设置.查找.删除.检测.枚举它 ...
- JavaScript正则进阶之路——活学妙用奇淫正则表达式
原文收录在我的 GitHub博客 (https://github.com/jawil/blog) ,喜欢的可以关注最新动态,大家一起多交流学习,共同进步,以学习者的身份写博客,记录点滴. 有些童鞋肯定 ...
- JavaScript的进阶之路(七)客户端JavaScript知识点总结
一.客户端JavaScript主要是BOM DOM的操作和js脚本的兼容性.互用性.可访问性.安全性的应用.以及一些框架的引用. 二.BOM:浏览器对象模型 主要介绍window对象 1.定时器:se ...
- JavaScript的进阶之路(三)引用类型之Object类型和Array类型
引用类型 Object类型 function a(num){ if(num>3){ a(--num); } console.log(num); } a(5); //如何创建对象的实例 var o ...
- JavaScript的进阶之路(一)
JavaScript由ECMAScript BOM DOM三部分组成 ECMAScript重要版本1,3,5,6,提供核心语言功能 DOM提供访问和操作网页内容的方法和接口 BOM提供与浏览器交互的的 ...
- ASP.NET MVC进阶之路:深入理解依赖注入(DI)和控制反转(IOC)
0X1 什么是依赖注入 依赖注入(Dependency Injection),是这样一个过程:某客户类只依赖于服务类的一个接口,而不依赖于具体服务类,所以客户类只定义一个注入点.在程序运行过程中,客户 ...
随机推荐
- iOS开发~制作同时支持armv7,armv7s,arm64,i386,x86_64的静态库.a以及 FrameWork 的创建
armv7,armv7s,arm64,i386,x86_64 详解 一.概要 平时项目开发中,可能使用第三方提供的静态库.a,如果.a提供方技术不成熟,使用的时候就会出现问题,例如: 在真机上编译报错 ...
- luogu_1379 八数码难题
八数码-->BFS+set #include<iostream> #include<cstdlib> #include<cstdio> #include< ...
- 常见的http错误提示
1xx(临时响应)表示临时响应并需要请求者继续执行操作的状态代码. 代码 说明100 (继续) 请求者应当继续提出请求.服务器返回此代码表示已收到请求的第一部分,正在等待其余部分. 101 (切换协议 ...
- python学习,day3:函数式编程,局部变量和全局变量
# coding=utf-8 # Author: RyAn Bi school = 'THU' #全局变量 def change_name(name): global age #在函数中,用globa ...
- (7.0 version)当销售单中包含service或phantom类型的产品时,销售单不能完成的原因分析及解决方案
首先说一下service类型的产品,由于该类型的产品不需要发货,所以当在销售订单确认了后,销售单直接变成了等待开票的状态,但当开票的流程结束后,订单却还是停在销售单的状态上,该问题的解决方案是安装Ta ...
- 从mdb到crash
本文面向使用过Solaris的mdb但是没有使用过Linux的crash的同学.比如说我自己,mdb用了很多年,现在全面转向Linux平台,于是很好奇Linux有没有类似的工具.熟悉Solaris的同 ...
- 第六章、Linux 的文件权限与目录配置
第六章.Linux 的文件权限与目录配置 1. 使用者与群组 2. Linux文件权限概念 2.1 Linux文件属性 2.2 如何改变文件属性与权限: chgrp, chown, chmod 2.3 ...
- 【LeetCode题解】530_二分搜索树的最小绝对值差
目录 [LeetCode题解]530_二分搜索树的最小绝对值差 描述 方法一.中序遍历二分搜索树 思路 Java 代码 Python 代码 [LeetCode题解]530_二分搜索树的最小绝对值差 描 ...
- C#实现文件下载的几种方式
上篇博客也说了下C#中通过XML导出Excel,这些文件操作都挺有用的,下面是文件的下载,之前做项目都是把它写的空间日志中,以后有时间了把它们都弄出来 先把有问题的代码贴出来吧 using Syste ...
- 搭建Eclipse和MyEclipse的开发环境
主要步骤: 下载并配置Eclipse 建立并运行一个简单的javaSE项目 下载并破解MyEclipse 整合Eclipse和MyEclipse 开发环境和Tomcat结合 关于这个配置也可以参考:h ...