/AndyRoyal2012

just start

Primary LanguageJavaScript

AndyRoyal2012

##随想函数 数据类型转换等?

##有问题反馈 在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流

  • 邮件(419656532#QQ.com, 把#换成@)
  • QQ: 419656532

##感激 感谢以下的项目,排名不分先后

##关于作者

  var ihubo = {
    nickName  : "小太阳",
    QQ : "419656532"
  }

OTHER

some regexp

a good regexp site

读数据结构与算法javascript描述

###函数

两种:

*有返回值的函数 *无返回值的函数[也叫做子程或void函数] JS中,函数的参数传递方式都是按值传递,没有按引用传递的参数。 JS中,没有保存引用的对象,比如数组,都是按照引用传递的。

##JS与其他编程语言 js 拥有的是函数作用域,JS没有块级作用域,有别于其他语言。js中允许函数递归调用,递归层次较深的话,可能会超出 js的处理能力,这时我们就要寻求该算法的一种迭代式解决方案了。任何可以通过递归定义的函数,都可以被改写成迭代式的程序。

##编写容易读的代码和编写出让计算机能正确执行的代码同等重要。

这里讨论的数据结构都被实现为对象。this关键字用来将方法和属性绑定到一个对象的实例上。

#第二章 数组

##JS中的数组,严格来说应该称为对象。是特殊的JS对象,在内部被归类为数组。 由于Array在JS中被当做对象,因此它有许多属性和方法可以在编程时使用。

数组是最常见的数据结构,数组是编程语言中的内建类型。效率很高。 可以不满足不同的数据存储。

###数组的标准定义:

一个存储元素的线性集合。元素可以通过索引来任意存取,索引通常是数字,用来计算元素之间的偏移量,几乎所有的编程语言都有类似的数据结构, 然而JS数组略有不同。

JS中的数组是特殊的对象,用来表示偏移量的索引是该对象的属性。 这些数字索引在内部被转换为字符串类型。 这是因为JS对象的属性名必须是字符串,数组在JS中只是一种特殊的对象。效率不如其他语言的高

##2.2.1创建数组

方式多种不阐述了 多数专家推荐使用[]操作符,和利用Array的构造函数比,这种方式效率更高。 在脚本语言中常见的特性是,数组中的元素不必是同一种数据类型,这一点和很多编程语言不同。

##2.2.2读写数组

  • 可用[] 操作符将数据赋值给数组。比如: var nums = []; for(var i=0;i<100;++i){ nums[i]=i+1; }

  • 还可用[]来读取数组中的元素 [数字索引]

*用for循环读取数组中的所有元素,无疑更简单。使用数组的length来控制循环次数。 数组的长度可以任意增长,超出其创建时指定的长度。可确保循环遍历了数组中的所有元素。

##2.2.3 由字符串生成数组

调用字符串对象的 split("常见的分割符")方法可以生成数组。 并将每部分作为一个元素,保存于一个新建的数组中。

##2.2.4 对数组的整体性操作

  • 将一个数组赋给另外一个数组。
var nums = [];
for(var i=0;i<10;++i){
   nums[i]=i;
}
var samesums = sums;

//9
//nums
//[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  • 浅复制 新数组依然指向原来的数组。

但是,当把一个数组赋给另外一个数组时,只是为被赋值的数组增加了一个新的引用。当你通过原引用修改了数组的值, 另外一个引用也会感知到变化,例如:

var nums = [];
for(var i=0;i<10;++i){
   nums[i]=i;
}
nums[0] = 100;
var samesums = sums;
samesums[0];//100 同样是取到了修改后的值。
  • 深复制 将原数组中的 每一个 元素都复制到一个新数组中,可通过此函数:
function copy(arr1,arr2){
    for(var i=0;i<arr1.length;++i){
		arr2[i] = arr1[i]
	}
};
var samesums = [];
copy(nums,samesums);
nums[0]=100;
samesums[0];//输出 1

##2.3 存取函数

JS提供了一组用来访问数组元素的函数,叫做 存取函数, 这些函数返回目标数组的某种变体。

###2.3.1 查找元素

indexOf()函数是常见的存取函数之一,lastIndexOf()

###2.3.2 数组中的字符串表示

join() 和 toString()

###2.3.2 由已有数组创建新数组

concat() 和 splice()

##2.4 可变函数

JS拥有一组可变函数,用它们,可以不必引用数组中的某个元素,就可以改变数组内容。

  • push() unshift()
//低效  在数组的开头加入元素, 需要把后面的每一个元素都相应的后移一个为位置
//只要涉及到数组元素偏移量,向前向后移动时,就比较低效
var nums = [1,2,3];
var newnum = 0;
var N =nums.length;
for(var i=N;i>=-1;--i){
	nums[i] = nums[i-1]

}
nums[0]=newnum;
nums;//Snums[i]
  • pop() shift()

  • splice() 删除数组中的第一个元素和在数组开头添加一个元素存在同样的问题---两种操作都需要将数组中的剩余元素 向前或向后偏移,然而splice() 可以帮我们执行其中任何一种操作。

###2.4.4为数组排序

剩下的两个可变方法是为数组排序 reverse() sort()//sort方法是按照字典顺序进行排序的,因此他假定元素都是字符串类型。

function compare(n1,n2){
	return n1-n2;//减数和被减数的比较结果只有三种>=<
};
var nums = [3,1,5,100,200,2];
nums.sort(compare);//1,2,3,5,100,200

##2.5 迭代器方法 (一般都是接收一个函数做为参数,处理数组中的每一个元素)

###这些方法对数组中的每一个元素应用一个函数,可以返回一个值,一组值,或者一个新数组。

##2.5.1 不生成新数组的迭代器方法

  • forEach()

  • every(),some()----接收一个返回值为布尔值的函数

  • reduce()方法接受一个函数,返回一个值。 该方法从一个累加值开始,不断对累加值和数组中的后续元素调用该函数。直到数组中的最后一个元素 最后,返回得到的累加值

function add(runningTotal,currentValue){
	return runningTotal + currentValue;
};
var nums = [1,2,3,4,5,6,7,8,9,10];
var sum = sum.reduce(add);
sum//55

//reduce()和add方法一起,从左到右,依次对数组中的元素求和
//

reduceRight()和reduce()相反。

##2.5.2 生成新数组的迭代器方法 map() 和 filter()

  • map() 的 forEach()有点像,对数组中的每一个元素使用某个函数,两者的
  • 区别是map()返回一个新的数组,该数组的元素是对原有元素应用某个函数得到的结果。

##2.6 二维和多维数组 ··················

JS中只支持一维数组,但是通过在数组里保存数组元素的方法,可以轻松创建多维数组

设定数组的行数,列数和初始值

Array.matrix = function(numrows,numcols,initial){
	var arr = [];
	for(var i=0; i<numrows; ++i){
		var columns = [];
		for(var j=0;j<numcols;++j){
			columns[j] = initial;
		}

	arr[i] = columns;

	}
	return  arr;
};

var nums = Array.matrix(5,5,0);
nums[1][1];//0