JS 数字 - JS数组迭代

JavaScript 数值始终是 64 位的浮点数

  • 整数(不使用指数或科学计数法)会被精确到 15 位

  • 小数的最大数是 17 位

    但是浮点的算数并不总是 100% 精准

    利用 var x = (0.2 * 10 + 0.1 * 10) / 10; 解决


数字字符串只有 + 时是级联,其他时候JS会尝试将字符串转换为数字再进行运算


NaN - 非数值

例如:var x = 100 / "Apple"; 将得到NaN

使用isNaN() 来确定某个值是否是数

NaN 是数,typeof NaN 返回 number

NaN == / === NaN // false

对象之间无法比较


数组方法

  1. toString() 将数组转换为数组值(逗号分隔)的字符串

    join() 方法可以规定分隔符

    所有对象都有 toString() 方法,如果需要数组原始值,则输出时自动转换为字符串,可以不使用 toString()

  2. pop()push()

    pop() 删除数组最后一个元素,返回被弹出的值

    push() 在数组结尾处添加一个新元素,返回新数组长度

  3. shift()unshift()

    shift() 删除数组首个元素,并将其他元素位置至更低索引,返回被弹出的值

    unshift() 在数组首部添加新元素,并反向位移旧元素,返回新数组长度

  4. 使用 length 属性向数组追加新元素

    arr[arr.length] = "nice"

  5. delete 运算符

    delete arr[1]

    但是会在数组留下未定义词 undefined

  6. splice()

    arr.splice(2,2,"nice","well")

    第一个参数定义添加元素的位置,第二个参数定义删除元素个数

    其余参数定义需添加的元素,返回一个包含被删除项的数组

    利用 arr.splice(0,1) 删除-某个元素,却不留空洞、空值

  7. concat()

    	var arr1 = [ , ];
    	var arr2 = [ , ];
    	var arr3 = arr1.concat(arr2);
    

    concat() 不改变现有数组,返回新数组,可设置任意数量的数组参数或值

  8. slice()

    arr2 = arr1.slice(1,3) ,1为开始位置,3为结束位置,也可以忽略结束参数


数组排序

sort() 方法以字母顺序对数组进行排序,不可对数字排序(需结合比值函数)

reverse() 反转数组元素顺序,可以结合 sort() 进行降序排序


比值函数

function(a,b){return a-b}

function(a,b){return b-a} 降序

arr.sort(function(a,b){return a-b})


排列数组

  1. 随机顺序

    arr.sort(function(a,b){return 0.5 - Math.random()})0.5减去一个随机数(0至1)

  2. 查找最大、最小值

    Math.max.apply(null, arr);
    Math.min.apply(null, arr);
    自制函数

    	function myArrayMax(arr) {
     		var len = arr.length
    		var max = -Infinity;
    		while (len--) {
        		if (arr[len] > max) {
            		max = arr[len];
        		}
    		}
    		return max;
    	}
    
  3. 排序对象数组

    即使对象拥有不同数据类型的属性,sort() 方法仍可用于对数组进行排序

  • 通过比较函数来对比属性值

    根据年份对汽车排序: cars.sort(function(a, b){return a.year - b.year});

  • 比较字符串属性会稍复杂

    	cars.sort(function(a, b){
      		var x = a.type.toLowerCase();		//整体字母小写
      		var y = b.type.toLowerCase();		//整体字母小写
      		if (x > y) {return 1;}						//比较如果大于为正值
      		if (x < y) {return -1;}						//比较如果小于为负值
      		return 0;
    	});
    

数组迭代 value项目值 index项目索引 array数组本身 total总数

  1. forEach() 方法为每个数组元素调用一次函数(回调函数)

    	var txt = "";
    	var numbers = [45, 4, 9, 16, 25];
    	numbers.forEach(myFunction);
    	function myFunction(value, index, array) {	//需要什么参数调用什么
    		txt = txt + value + "<br>"; 
    	}
    
  2. map() 方法通过对每个数组元素执行函数来创建新数组,不会更改原始数组,不会对没有值的数组元素执行函数

    	var numbers1 = [45, 4, 9, 16, 25];
    	var numbers2 = numbers1.map(myFunction);
    	function myFunction(value, index, array) {	
    		return value * 2;
    	}
    
  3. filter() 方法创建一个包含通过测试的数组元素的新数组

    		var numbers = [45, 4, 9, 16, 25];
    		var over18 = numbers.filter(myFunction);
    		function myFunction(value, index, array) {
    			return value > 18;
    		}
    
  4. reduce() 方法在每个数组元素上运行函数,以生成(减少它)单个值,在数组中从左到右工作,不会减少原始数组
    reduceRight() 方法在每个数组元素上运行函数,以生成(减少它)单个值,在数组中从右到左工作,不会减少原始数组

    	var numbers1 = [45, 4, 9, 16, 25];
    	var sum = numbers1.reduce(myFunction/*(,begain)接受初始值*/);
    	function myFunction(total, value, index, array) {
    		return total + value;
    	}
    
  5. 测试数组值

    every() 方法检查 所有数组值是否通过测试

    		var numbers = [45, 4, 9, 16, 25];
    		var allOver18 = numbers.every(myFunction);
    		function myFunction(value, index, array) {
    			return value > 18;
    		}
    

    some() 方法检查 某些数组值是否通过了测试

    		var numbers = [45, 4, 9, 16, 25];
    		var someOver18 = numbers.some(myFunction);
    		function myFunction(value, index, array) {
    			return value > 18;
    		}
    
  6. 检索项目

    indexOf()lastIndexOf() 方法在数组中搜索元素值并返回其位置

    array.indexOf(item, start)

    item 必需,要检索的项目

    start 可选,从哪里开始搜索,负值将从结尾开始数的给定位置开始,并搜索到结尾(indexOf())或开头(lastIndexOf()

  7. find() 方法返回通过测试函数的第一个数组元素的

    findIndex() 方法返回通过测试函数的第一个数组元素的索引

    	var numbers = [4, 9, 16, 25, 29];
    	var first = numbers.find(myFunction);
    	function myFunction(value, index, array) {
    		return value > 18;
    	}
    

相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页