JS对象:数组

创建数组

  • 构造函数
var a1 = new Array(5); console.log(a1.length); //5 console.log(a1); //[] ,数组是空的

  • 字面量
var b = [1, 2, 'hello'];

基本方法:push、pop、shift、unshift、join、splice、sort、join、reverse、concat;
var arr = [ 0,1,1,2,3,5,8,13,21,34,55] arr.push("a"); console.log(arr); arr.pop("a"); console.log(arr); arr.unshift("a"); console.log(arr); arr.shift("a"); console.log(arr); arr.splice(2,2,"a" ,"b"); console.log(arr); console.log(arr.join("/")); var arr1=["b"]; console.log(arr.concat(arr1)); console.log(arr); console.log(arr.reverse()); console.log(arr.sort()); arr.sort(function(v1,v2){ return v1 - v2; }) console.log(arr);

用 splice函数分别实现 push、pop、shift、unshift方法。
function push(arr, value){ arr.splice(arr.length, 0, value) return arr.length } var arr = [3, 4, 5] arr.push(10) function pop(arr){ arr.splice(arr.length-1,1,0) return arr.length; } arr.pop(); console.log(arr); function unshift(arr,value){ arr.splice(0,0,value) return arr.length } arr.unshift(1); console.log(arr); function shift(arr){ arr.splice(0,1,0) return arr.length; } arr.shift(); console.log(arr);

ES5 数组拓展
  • .indexOf(element) / .lastIndexOf(element):用于查找数组内指定元素位置,查找到第一个后返回其索引,没有查找到返回-1,indexOf从头至尾搜索,lastIndexOf反向搜索。
  • .forEach(element, index, array)
  • .every(function(element, index, array)) / .some(function(element, index, array)):
    这两个函数类似于离散数学中的逻辑判定,回调函数返回一个布尔值:
    every是所有函数的每个回调函数都返回true的时候才会返回true,当遇到false的时候终止执行,返回false
    some函数是“存在”有一个回调函数返回true的时候终止执行并返回true,否则返回false
  • .map(function(element)):与forEach类似,遍历数组,回调函数返回值组成一个新数组返回,新数组索引结构和原数组一致,原数组不变
  • .filter(function(element))
    返回数组的一个子集,回调函数用于逻辑判断是否返回,返回true则把当前元素加入到返回数组中,false则不加
    新数组只包含返回true的值,索引缺失的不包括,原数组保持不变
  • .reduce(function(v1, v2), value) / .reduceRight(function(v1, v2), value):
    遍历数组,调用回调函数,将数组元素组合成一个值,reduce从索引最小值开始,reduceRight反向,方法有两个参数
    回调函数:把两个值合为一个,返回结果
    value,一个初始值,可选
var a = [1,2,3,4,5,6,3,2,1] console.log(a.indexOf(2)) //1 console.log(a.lastIndexOf(2)) //7 a.forEach(function(e,i,arr){ arr[i]=e*e; }); console.log(a); //[1, 4, 9, 16, 25, 36, 9, 4, 1]console.log( a.every(function(e,i,arr){ return e > 5; })); //false console.log( a.some(function(e,i,arr){ return e > 5; })); //true console.log(a.map(function(e){ return e * e })); //[1, 16, 81, 256, 625, 1296, 81, 16, 1] console.log(a); //[1, 4, 9, 16, 25, 36, 9, 4, 1] console.log(a.filter(function(e){ return e % 2 == 0; }))//[4, 16, 36, 4] console.log(a)// [1, 4, 9, 16, 25, 36, 9, 4, 1] var b = a.reduce(function(v1, v2){ return v1 + v2 }); console.log(b); // 105 var c = a.reduceRight(function(v1, v2){ return v1 + v2 }, 10) console.log(c); //115

范例: 写一个函数,操作数组,返回一个新数组,新数组中只包含正数。
function filterPositive(arr){ var arr1 = []; for(var i = 0; i< arr.length; i++ ){ if(typeof arr[i] === "number" && arr[i] > 0){ arr1.push(arr[i]) } } return arr1; } var arr = [3, -1,2,'饥人谷', true] var arr = filterPositive(arr) console.log(arr)// [3,2]

对以下代码 users中的对象,分别以 name 字段、age 字段、company 字段进行排序
var users = [ { name: "John", age: 20, company: "Baidu" }, { name: "Pete", age: 18, company: "Alibaba" }, { name: "Ann", age: 19, company: "Tecent" } ] var sortByName = users.sort(function(v1,v2){ return v1.name > v2.name; }); console.log(sortByName); var sortByAge = users.sort(function(v1,v2){ return v1.age - v2.age; }); console.log(sortByAge); var sortByCompany = users.sort(function (v1,v2){ return v1.company > v2.company; } ); console.log(sortByCompany);

实现一个reduce函数,作用和原生的reduce类似下面的例子。
var sum = reduce([1, 2, 3], function(memo, num){ return memo + num; }, 0); //6 function reduce(arr,iterate,initValue){ var tmpArr = (initValue =https://www.it610.com/article/== undefined ?[]:[initValue].concat(arr)) while(tmpArr.length>1){ tmpArr.splice(0,2,iterate(tmpArr[0],tmpArr[1])); } return tmpArr[0]; } var sum = reduce([3,5,6],function(v1,v2){ return v1 + v2; },10); console.log(sum); //24

实现一个flatten函数,将一个嵌套多层的数组 array(数组) (嵌套可以是任何层数)转换为只有一层的数组,数组中元素仅基本类型的元素或数组,不存在循环引用的情况
function flatten(arr){ return arr.reduce(function(arr1,arr2){ return arr1.concat(Array.isArray(arr2)?flatten(arr2):arr2) },[]) } function flatten2(arr){ var newArr= []; arr.forEach(function(e){ if(Array.isArray(e)){ newArr=newArr.concat(flatten2(e)); }else { newArr.push(e); } }) return newArr; } var arr = [3, [2, -4, [5, 7]], -3, ['aa', [['bb']]]] var arr1=flatten(arr); console.log(arr1); //[3, 2, -4, 5, 7, -3, "aa", "bb"] var arr2=flatten2(arr); console.log(arr2); //[3, 2, -4, 5, 7, -3, "aa", "bb"]

【JS对象:数组】作者:彭荣辉
链接:https://www.jianshu.com/u/0f804364a8a8
來源:
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    推荐阅读