您好,欢迎访问一九零五行业门户网

javascript中的最基础数据结构-----数组

1.1   javascript中对数组的定义
数组的标准定义:一个存储元素的线性集合,元素可以通过索引来任意存取,索引通常是数字,用来计算元素之间存储位置的偏移量。
不过javascript中的数组是一种特殊的对象,用来表示偏移量的索引是该对象的属性,索引可能是整数。however,这些数字索引在内部被转换为字符串类型,是因为javascript对象中的属性名必须是字符串。
2.2 使用数组
2.2.1 创建数组
var nums = [1,2,3,4]; || 该方法效率更高
var nums = new array(1,2,3,4);
2.2.2 读写数组
在一条赋值语句中,使用 [] 操作符将数据赋给数组,比如下面的循环,将1~100的数字赋给一个数组:
var nums = [];for (var i =0; i<100;i++){ nums[i] = i+1;}
还可以用 [ ] 操作符读取数组中的元素:
var nums = [1,2,3,4]; var sum = nums[0]+nums[1]+nums[2]+nums[3]; console.log(sum)
2.2.3 由字符串生成数组
var sentence = the quick brown fox jumped over the lazy dog; var words = sentence.split( ); for (var i=0; i 在上述程序中,调用 splite()方法,通过单词之间的空格分隔符,讲一句话分成及部分,并将每部分作为一个元素保存于一个新建的数组中。
2.2.4 对数组整体性的操作
1.将一个数组赋值给另外一个数组
var nums = []; for (var i = 0; i<10;i++){ nums[i] = i+1; } var samenums = nums;
但是如上赋值操作,只是为被赋值的数组增加一个新的引用。当通过原引用修改了数组的值,另一个引用也会发生变化。
var nums = []; for (var i = 0; i<10;i++){ nums[i] = i+1; } var samenums = nums; nums[0] = 400; console.log(samenums[0]); //显示400
这种行为是浅复制,新数组依然指向原来的数组。
更好的方案是深复制,将原数组中的每一个元素都复制一份到新数组中。
//写个深复制函数function copy(arr1,arr2){ for (var i = 0;i对字符型的元素按字典顺序进行排序
对于数字类型的元素,如果要用sort()排序,可以在调用方法时传入一个大小比较函数,排序时,sort()方法会根据该函数比较数组中两个元素的大小,来决定整个数组的顺序。
function compare(num1,num2){ return num1-num2; } var nums = [3,4,1,80,27]; nums.sort(compare);
sort()使用了compare()函数对数组按照数字大小进行排序,而不是按照字典顺序。
2.5 迭代器方法
2.5.1 不生成新数组的迭代器方法
1.foreach()
接受一个函数作为参数,并对数组中的每个元素使用该函数。
function square(num){ console.log(num,num*num); } var nums = [1,2,3,4,5,6]; nums.foreach(square);
2.every()
接受一个返回值为布尔型的函数,对数组中的每个元素使用该函数。如果对于所有的元素,该函数都返回true,则该方法返回true。
function iseven(num){ return num%2 == 0; } var nums = [2,4,6,8]; var even = nums.every(iseven); if(even){ console.log(all numbers are even); }else{ console.log(not all numbers are even); }
可以改改数组里的元素试试。
3.some()
some() 方法也接受一个返回值为布尔类型的函数,只要有一个元素使得该函数返回 true, 该方法就返回 true.
function iseven(num) { return num % 2 == 0; } var nums = [1,2,3,4,5,6,7,8,9,10]; var someeven = nums.some(iseven); if (someeven) { console.log(some numbers are even); } else { console.log(no numbers are even); } nums = [1,3,5,7,9]; someeven = nums.some(iseven); if (someeven) { console.log(some numbers are even); } else { console.log(no numbers are even);}
4.reduce()
接受一个函数,返回一个值。该方法会从一个累加值开始,不断对累加值和 数组中的后续元素调用该函数,直到数组中的最后一个元素,最后返回得到的累加值。
下 面这个例子展示了如何使用 reduce() 方法为数组中的元素求和:
function add(runningtotal,currentvalue){ return runningtotal + currentvalue; } var nums = [1,2,3,4,5,6]; var sum = nums.reduce(add); console.log(sum);
reduce() 方法和 add() 函数一起,从左到右,依次对数组中的元素求和。
reduce() 方法也可以用来将数组中的元素连接成一个长的字符串:
function concat(accumulatedstring,tiem){ return accumulatedstring + item; } var words = [the , quick ,brown , fox ]; var sentence = words.reduce(concat); console.log(sentence);
2.5.2 生成新数组的迭代器方法
1. map()
map() 和 foreach() 有点儿像,对 数组中的每个元素使用某个函数。两者的区别是 map() 返回一个新的数组,该数组的元素 是对原有元素应用某个函数得到的结果。
function curve(grade){ return grade += 5; } var grades = [78,89,92,74]; var newgrades = grades.map(curve); console.log(newgrades); // 83,94,97,79
2. filter()
filter() 和 every() 类似,传入一个返回值为布尔类型的函数。和 every() 方法不同的是, 当对数组中的所有元素应用该函数,结果均为 true 时,该方法并不返回 true,而是返回 一个新数组,该数组包含应用该函数后结果为 true 的元素。
function passing(num) { return num >= 60; } var grades = []; for (var i = 0; i < 20; ++i) { grades[i] = math.floor(math.random() * 101); } var passgrades = grades.filter(passing); console.log(all grades: ); console.log(grades); console.log(passing grades: ); console.log(passgrades);
其它类似信息

推荐信息