java javascript数组_浅谈javascript和java中的数组
javascript中的数组
数组的创建
直接创建方式 var str = ['java', 'js'];
使用new创建方式: var a = new Array(10); // 定义长度为10的数组(可变)
另类new创建方式:var a = new Array(1, 2, 3, 4, 5);var b = [1, 2, 3, 4, 5];
二维数组(多维)创建方式:var a = new Array([1,2,3], [4,5,6], [7,8,9]); var b = [[1,2,3], [4,5,6], [7,8,9]];
创建数组注意事项:js中的数组长度、类型都是“动态性”的。即长度可变、类型多样。
数组的判别
面试的时候经常会被问道:js中怎么判断一个变量是数组类型?
答案有很多,这里我列举一下我所知道的一些判断方法
1 //千万别犯这种错误
2 console.log(typeof []) //object
3 //方法一
4 var arr = [1,2,3];5 console.log(arr.constructor === Array)//true
6 //方法二
7 console.log(arr instanceof Array) //true
8 //方法三
9 console.log(Object.prototype.toString.call(arr) === '[object Array]')//true
10 //方法四
11 Array.isArray(arr) //es5 新方法
数组的常用方法
arr. push();// 将一个或多个新元素添加到数组结尾,并返回数组新长度
arr.unshift();// 将一个或多个新元素添加到数组开始,返回数组新长度
arr.splice(arg1,arg2,arg3); //增删改都可以,非常强大
arr.pop();//移除最后一个元素并返回该元素值
arr.shift(); //移除最前一个元素并返回该元素值,数组中元素自动前移
arr.slice(start, [end]);//以数组的形式返回数组的一部分,注意不包括 end 对应的元素
arrayObj.reverse(); //反转元素(最前的排到最后、最后的排到最前)
arrayObj.sort(); //对数组元素排序,返回数组地址
es5 新增的数组方法,详情见下面代码
1 //代码来自网络,大致能表达我的意思2 //定义一个数组,存储不同数据类型的元素
3 var array = [8, 2, 1, 5],4 array2 =[5 [0, 1],6 [1, 2],7 [2, 3]8 ],9 value;10
11 ///Array.prototype.reduce = function(callback,initialValue) {};
12 //化解数组:13 //调用reduce 方法提供的回调函数,14 //总共调用 数组的lenght - 1次 回调函数15 //第一次时 previousValue 为 initialValue16 //此后 reduce方法的返回值 作为 previousValue17
18 //reduceRight 则从数组最右边开始,进行上述操作19
20 //数组中元素累加
21 value =array.reduce(function (previousValue, currentValue, index, array) {22 return previousValue +currentValue;23 }24 );25 console.log(value); //1626
27 //数组扁平化
28 value =array2.reduce(function (previousValue, currentValue, index, array) {29 returnpreviousValue.concat(currentValue);30 }31 );32 console.log(value); //[ 0, 1, 1, 2, 2, 3 ]
33
34 ///Array.prototype.indexOf = function(searchElement,fromIndex) {};
35 //从fromIndex索引处 向后寻找searchElement元素 找到并返回其索引,否则返回-136 //fromIndex 默认为 0
37 console.log(array.indexOf(1)); //2
38 console.log(array.indexOf(3)); //-1
39
40 ///Array.prototype.lastIndexOf = function(searchElement,fromIndex) {};
41 //从fromIndex索引处 向前寻找searchElement元素 找到并返回其索引,否则返回-1
42 console.log(array.lastIndexOf(1)); //2
43 console.log(array.lastIndexOf(3)); //-1
44
45 ///Array.prototype.every = function(callback,thisObject) {};
46 //测试数组的所有元素是否都通过了指定函数的测试
47 value =array.every(function (element, index, array) {48 return element > 1;49 });50 console.log(value); //false
51
52
53 ///Array.prototype.filter = function(callback,thisObject) {};
54 //数组过滤:55 //返回通过函数测试的 元素(当回调函数的返回true,表明元素通过测试 ),生成新的数组
56 value =array.filter(function (element, index, array) {57 return element > 1;58 });59 console.log(value);//[ 8, 2, 5 ]
60
61
62 ///Array.prototype.forEach = function(callback,thisObject) {};
63 //为每个数组元素执行一次回调函数。
64 array.forEach(function (element, index, array) {65 console.log(element);66 });67
68
69 ///Array.prototype.map = function(callback,thisObject) {};
70 //数组映射:71 //返回一个由原数组中的每个元素调用一个指定方法后的返回值组成的新数组。
72 value =array.map(function (element, index, array) {73 return element *element;74 });75 console.log(value); //[ 64, 4, 1, 25 ]
76
77
78 ///Array.prototype.some = function(callback,thisObject) {};
79 //测试数组中的某些元素是否通过了指定函数的测试。
80 value =array.some(function (element, index, array) {81 return element > 1;82 });83 console.log(value); //true
84
85
86 ///Array.prototype.isArray = function(object) {};
87 //判断元素是否为数组类型
88 console.log(Array.isArray(array)); //true
View Code
这是我在谷歌浏览器查找的数组全部方法属性 截图如下
数组的重要知识点
数组是传递引用的
1 var x = [1, 9, 8];2 var y =x;3 x[0] = 2;4 console.log(y[0]);//2
2. 联合数组
1 var arr=[];2 arr['a']=1;3 arr['b']=2;4 console.log(a.length);//0 数组是对象类型,当然js中一切皆为对象!!!
3.类数组。
JavaScript和DOM中有很多类数组对象,它们只是类似数组,而不是数组,并不能使用数组的特有方法,如slice、push、pop等。
arguments
getElementsByName(name)
getElementsByClassName(className)
getElementsByTagName(tagName)
document.forms //所有form元素
document.images //所有img元素
document.links //所有带href属性的a元素和area元素
.......
类数组转为真正的数组方法:Array.prototype.slice.call(arguments);
4.稀疏数组。
稀疏数字就是包含从0开始的不连续索引的数组。
稀疏数组的length属性值大于元素的个数. 代码如下
var a=[];
a[100]=23;
console.log(a.length);//101
5.作为数组的字符串
个人理解是:可索引的字符串。
var s="javascript";
console.log(s[1]);//a 标准的字符串方法应该是s.charAt(1)//数组和字符串方法可以灵活的相互利用
Array.prototype.join.call(s,"+");//j+a+v+a+s+c+r+i+p+t
备注:push()、sort()、reverse()、splice()等数组方法会修改数组,但是在字符串上是无效的。因为字符串是不可变值!!!
java中的数组
前言:JAVA数组与容器类主要有三方面的区别:效率、类型和保存基本类型的能力。在JAVA中,数组是一种效率最高的存储和随机访问对象引用序列的方式。数组就是一个简单的线性数列,这使得元素访问非常快速。但是为此付出的代价却是数组的大小被固定,并且在其生命周期中不可改变。
数组的创建
type[] 变量名 = new type[数组中元素的个数];
type[] 变量名 = {"a","b"}
java中数组长度不可变,类型一致
个人觉得java中直接用数组的机会不是很大,大多数都是用集合(很多方法都是基于数组)
为什么需要数组
当我们定义一个变量时可以使用一个变量名表示,但是如果出现很多的变量我们分别起变量名代替表示存储就比较麻烦了,为了解决这样的问题我们采用数组的形式表示存储,使用下标 表示每个变量。
声明一个变量就是在内存中划出一块合适的空间;声明一个数组就是在内存中划出一串连续打的空间
数组方法
1、打印数组
int[] intArray = { 1, 2, 3, 4, 5};
String intArrayString=Arrays.toString(intArray);//print directly will print reference value
System.out.println(intArray);//[I@7150bd4d
System.out.println(intArrayString);//[1, 2, 3, 4, 5]
2、检查一个数组是否包含某个值
String[] stringArray = { "a", "b", "c", "d", "e"};boolean b = Arrays.asList(stringArray).contains("a");
System.out.println(b);//true
3、移除数组中的元素
int[] intArray = { 1, 2, 3, 4, 5};int[] removed = ArrayUtils.removeElement(intArray, 3);
System.out.println(Arrays.toString(removed));
4、数组转为list
String[] stringArray = { "a", "b", "c", "d", "e"};
ArrayList arrayList = new ArrayList(Arrays.asList(stringArray));
System.out.println(arrayList);//[a, b, c, d, e]
5、数组转为set
Set set = new HashSet(Arrays.asList(stringArray));
System.out.println(set);//[d, e, b, c, a]
6、数组比较
Arrays提供了重载后的equals()方法,针对所有类型和Object类型都做了重载,用来比较整个数组。数组相等的条件是元素个数必须相等,并且对应位置的元素也相等。而多维数组的比较用deepEquals()方法。Array.equals()方法比较的两个数组必须是同类型的数组。
import java.util.Arrays;
public class javaArrayEquals{
public staticvoidmain(String args[]){int[] arrayA = {1,2,3};int[] arrayB = {1,2,3,};int[] arrayC = new int[4]; //if int[] arrayC = new int[3],return true
arrayC[0] = 1;
arrayC[1] = 2;
arrayC[2] = 3;
System.out.println(Arrays.equals(arrayA, arrayB));
System.out.println(Arrays.equals(arrayA, arrayC));
String[][] arrayD= {{"a","b"},{"c","d"}};
String[][] arrayE= {{"a","b"},{"c","d"}};
System.out.println(Arrays.deepEquals(arrayD, arrayE));
}
}
View Code
7、集合更加强大。在开发中我们尽量用集合,而不是直接用数组解决问题
接下来的一个月,我要整天rhino、ps、手绘,应该不会过多的碰代码。因为不管怎么样,我必须得要顺利毕业吧!
java javascript数组_浅谈javascript和java中的数组相关推荐
- python语法中infile语句_浅谈pymysql查询语句中带有in时传递参数的问题
直接给出例子说明: cs = conn.cursor() img_ids = [1,2,3] sql = "select img_url from img_url_table where i ...
- python查询数据库带逗号_浅谈pymysql查询语句中带有in时传递参数的问题
直接给出例子说明: cs = conn.cursor() img_ids = [1,2,3] sql = "select img_url from img_url_table where i ...
- python封装继承多态_浅谈JavaScript的面向对象和它的封装、继承、多态
写在前面 既然是浅谈,就不会从原理上深度分析,只是帮助我们更好地理解... 面向对象与面向过程 面向对象和面向过程是两种不同的编程思想,刚开始接触编程的时候,我们大都是从面向过程起步的,毕竟像我一样, ...
- java list数组排序_浅谈对象数组或list排序及Collections排序原理
常需要对list进行排序,小到List,大到对自定义的类进行排序.不需要自行归并或堆排序.简单实现一个接口即可. 本文先会介绍利用Collections对List进行排序,继而讲到Collection ...
- join方法 js 单字符串会报错_浅谈JavaScript字符串拼接
在JavaScript中会经常遇到字符串拼接,但是如果要拼接的字符串过长就比较麻烦了. 如果在一行的话,可读性太差:如果换行的话,会直接报错. 现在就来介绍几个JavaScript拼接字符串的几个小技 ...
- java定义byte数组_浅谈java的byte数组的不同写法
(由于篇幅原因阐述的不够详细科学,不喜勿喷). 经常看到java中对byte数组的不同定义,粗略整理的一下: 一个字节(byte)=8位(bit),"byte数组"里面全部是&qu ...
- java缓存同步_浅谈JSON的数据交换、缓存问题和同步问题
JSON轻量级的数据交换格式 相对于XML来说,JSON的解析速度更快,文档更小. JSON的格式 {属性名:属性值,属性名:属性值,--} 属性名的类型可以是string,number,boolea ...
- java对象头_浅谈java对象结构 对象头 Markword
概述 对象实例由对象头.实例数据组成,其中对象头包括markword和类型指针,如果是数组,还包括数组长度; | 类型 | 32位JVM | 64位JVM| | ------ ---- | ----- ...
- java bitset用途_浅谈Java BitSet使用场景和代码示例
搜索热词 @H_502_0@一.什么是BitSet? @H_502_0@ 注:以下内容来自JDK API: @H_502_0@ BitSet类实现了一个按需增长的位向量.位Set的每一个组件都有一个b ...
最新文章
- C#编写的生成缩略图程序
- linux基础(8)-颜色显示
- ASP.NET输出JSON格式数据
- JavaScript数组方法大全解
- 测绘技术的发展与分类简述
- 学习Kotlin(三)类和接口
- Hibernate快速入门
- python3 安装模块_python3 Crypto模块的安装与使用
- 深度学习:tensorflow层次结构,朴素NN代码实现tensorflow
- 方立勋_30天掌握JavaWeb_Servlet Filter(过滤器)未完
- [翻译] Haneke(处理图片缓存问题)
- audio 上一首 下一首 自定义样式_被 iPhone 吹爆的最香功能,安卓也终于安排上了...
- php如何获取当前时间
- 记录一次 Win10 通过 VirtualBox安装CentOS7 的辛酸史
- Linux使echo命令输出结果带颜色
- python 赋值_关于 python 分片赋值
- 一步一步优化Windows XP(转)
- SAI:Switch Abstraction Interface
- Sentaurus training 笔记
- Exploring Visual Relationship for Image Captioning