javascript了解数组和数字排序ITeye - 乐橙lc8

javascript了解数组和数字排序ITeye

2019-01-14 05:09:00 | 作者: 铭晨 | 标签: 数组,排序,数字 | 浏览: 592

javascript数组分配内存对错线性的,这样会献身功能,优点就是愈加灵敏,例如:数组元素不要求相同的类型,给数组增加元素不会越界。
数组下标从0开端,length取值为最大下标加1。数组下标不用接连,你也能够改动length的值,数组元素内存是动态分配的,仅仅是设置更大的length不会占用更多的空间,而将length的值改小,则大于等于该下标的元素会被清除去,内存得以开释。
数组和目标的首要不同有两点,一是数组目标特点称号不能自定义,二是数组目标会有一些处理数组的办法,在目标中没有。
运用push函数增加元素语法比赋值更简练,例如words.push("go")会增加一个元素"go"到words数组的尾部,length主动加一。
运用delete函数删去一个数组元素,例如delete words[2]将删去第3个元素。假如删去的不是最终一个数组元素,会导致数组下标不接连。splice办法会发生接连的成果,运用举例:words.splice[3,2],从序号为3的元素开端删,删2个元素,剩余的元素往前挪2个方位(要留神数组元素特别多时会有功能问题)。
经过for in句子遍历数组不能确保次序,还可能从原型链中得到意外的特点。一般应经过for(var i = 0;i myArray.length;i+=1){ do somthing...}这样的句子来枚举数组。
运用数组仍是运用目标首要是取决于使用需求的特点名是不是整数。javascript不能用typeof区别数组和目标,二者回来的都是"object"。验证数组类型的代码如下:
var is_array = function(value){ 
  return value //有值 
  typeof value === "object" //typeof查出类型为object 
  typeof value.length === "number" //length特点是number类型 
  typeof value.splice === "function" //有splice办法 
  !(value.propertyIsEnumerable("length"))//length是一个不可枚举的特点 

由于数组的排序办法(sort)是按字符串比较的,所以对数字进行排序的成果一般不符合预期。多数人会想着自己去重写数字的排序,我觉得对数字进行排序比较好的做法是在数字前补零,排完序后再把零拿掉。这一办法绕过了构思排序算法的困难,而且还能打破数字长度的约束,对大数进行排序,发挥内置算法的功能。
//数字补零,正整数对齐 
Array.prototype.lpad = function (n){ 
  var lpad1 = function (num, n) { 
  var len = Math.floor(num).toString().length; 

  while(len n) { 
  num = "0" + num; 
  len++; 
  } 
  return num; 
  } 

  var tmpArray=[]; 
  for (var i=0;i this.length;i+=1){ 
  tmpArray.push(lpad1(this[i],n)); 
  } 

  return tmpArray; 



//排序 
Array.prototype.nsort = function (n){ 
  var farray = [];//小于0一组 
  var zarray = [];//大于等于0一组 
  var tmp = []; //暂时数组 
  var result = [];//回来值 

  for (var i=0;i this.length;i+=1){ 
  if(this[i] 0){ 
  farray.push(Math.abs(this[i]));//负数取绝对值 
  }else{ 
  zarray.push(this[i]); 
  } 
  } 

  tmp = farray.lpad(n).sort(); 
  for(var i=0;i tmp.length;i+=1){ 
  result.push(parseFloat(tmp[tmp.length-1-i])*-1);//负数组要反过来排序 
  } 

  tmp = zarray.lpad(n).sort(); 
  for(var i=0;i tmp.length;i+=1){ 
  result.push(parseFloat(tmp[i])); 
  } 

  return result; 


myNumArray = [2,-80,-9.6,-9.4,-10,5.823,-13.888,20,312,3,2,55,-1,7.999,22]; 

iJs.pt("myNumArray"); 
iJs.pt("is_array(myNumArray)"); 
iJs.pt("myNumArray.sort()"); 
iJs.pt("myNumArray.nsort(100)");
调试信息:
  myNumArray  2,-80,-9.6,-9.4,-10,5.823,-13.888,20,312,3,2,55,-1,7.999,22
  is_array(myNumArray)  true
  myNumArray.sort()  -1,-10,-13.888,-80,-9.4,-9.6,2,2,20,22,3,312,5.823,55,7.999
  myNumArray.nsort(100)  -80,-13.888,-10,-9.6,-9.4,-1,2,2,3,5.823,7.999,20,22,55,312

Array 目标特点(http://www.w3school.com.cn/js/jsref_obj_array.asp)
FF: Firefox, IE: Internet Explorer
特点 描绘 FF IE
constructor 回来对创立此目标的数组函数的引证。 1 4
index 1 4
input 1 4
length 设置或回来数组中元素的数目。 1 4
prototype 使您有才能向目标增加特点和办法。 1 4
Array 目标办法
FF: Firefox, IE: Internet Explorer
办法 描绘 FF IE
concat() 衔接两个或更多的数组,并回来成果。 1 4
join() 把数组的一切元素放入一个字符串。元素经过指定的分隔符进行分隔。 1 4
pop() 删去并回来数组的最终一个元素 1 5.5
push() 向数组的结尾增加一个或更多元素,并回来新的长度。 1 5.5
reverse() 倒置数组中元素的次序。 1 4
shift() 删去并回来数组的第一个元素 1 5.5
slice() 从某个已有的数组回来选定的元素 1 4
sort() 对数组的元素进行排序 1 4
splice() 删去元素,并向数组增加新元素。 1 5.5
toSource() 回来该目标的源代码。 1 -
toString() 把数组转换为字符串,并回来成果。 1 4
toLocaleString() 把数组转换为本地数组,并回来成果。 1 4
unshift() 向数组的最初增加一个或更多元素,并回来新的长度。 1 6
valueOf() 回来数组目标的原始值 1 4
版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表乐橙lc8立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章