数组

2018-06-26  本文已影响0人  真的吗_a951

1. 基本使用
-允许直接给后面添加值
arr[100] = 10

var arr = [1,2,5,6,9];
arr.splice(2,0,3,4)  //{1,2,3,4,5,6,9}

♡ 不进行替换只添加(b是0)的时候,是添加在a前面

//字符串倒序输出
function  sortString(str){
    str = str.split("")
    str = str.reverse()
    str = str.join('')
    return str
}
var str = 'jirenguhungervalley'
var str2 = sortString(str)
console.log(str2) // 'yellavregnuhugnerij'

2. 使用

var a=[1,2,10,200,3]
a.sort() //[1,10,2,200,3]

若要按照数值大小排序

a.sort(function (v1,v2){
    return v1-v2
}) //[1,2,3,10,200]

v1和v2比较,如果前一位减后一位大于0,就调换位置,小于0,就不管
按照对象里面的某个值来排序
① 按照数字大小

var users = [
  { name: "John", age: 20, company: "Baidu" },
  { name: "Pete", age: 18, company: "Alibaba" },
  { name: "Ann", age: 19, company: "Tecent" }
]
 user.sort(function(){
     return v1.age - v2.age
})
//0:{name: "Pete", age: 18, company: "Alibaba"}
//1:{name: "Ann", age: 19, company: "Tecent"}
//2:{name: "John", age: 20, company: "Baidu"}

②按字符串排序
return v1.name > v2.name字符串用大于表示

ES5 数组拓展
Array.isArray(obj)判断对象是不是一个数组
arr.indexOf(element) 看数组是否有element这个元素,并且会返回位置,从前往后找。lastIndexOf(element)从后往前找
★ 遍历数组
arr.forEach(element,index)参数可以是函数

var arr = [1,3,5,6,7]
arr.forEach(function(value,index){
    console.log(' '+value+value) //输出一个字符串加数组里的值,结果就是一个字符串
}) //遍历数组,函数里第一个参数是值,第二个是索引值, 输出[11,33,55,66,77]

.every(function(){})逻辑判断,返回布尔值

var arr = [1,-2,3,-5]
arr.every(function(val){
  return val > 0 ? true:false
})  //false

.map(function(element){})遍历数组,与forEcah类似,回调函数返回值组成一个新数组返回,新数组索引结构和原数组一致,原数组不变。

var arr = [1,2,3,4,5,6,9]
var arr2 = arr.map(function(val){
    return val*val
})
//arr [1, 2, 3, 4, 5, 6, 9]
//arr2 [1, 4, 9, 16, 25, 36, 81]

.filter(function(element))过滤

var arr = [1,2,3,4,5,6]
console.log(arr.filter(function(val){ //回调函数判断是不是返回true,是的话输出
  return val%2==0 //条件:对2取余等于0
}))  //满足条件返回值 [2,3,6]

reduce(function(v1,v2){},value)遍历数组,调用回调函数,讲数组元素合成一个值,reduce从索引最小值开始,reduceRight反向。value是可选的,表示初始值。
回调函数:把两个值合为一个,返回结果

var arr = [3,4,5]
arr.reduce(function(v1,v2){
    return v1+v2  //(3+4)+5  12
})

步骤实现

function reduce(arr,fn){
    var arr2 = arr;
    while(arr2.length > 1){
        console.log(arr2)
        arr2.splice(0,2,fn(arr2[0],arr2[1]))
    }
        return (arr2[0])
}
var arr = [3,4,5,6]
var result = reduce(arr,function(v1,v2){
  return v1 + v2
})
console.log(result)
结果

假如有初始值

function reduce(arr,fn,initValue){
    var arr2 = arr.concat([]);//合成两个数组(其中一个为空),变成一个新数组arr2,与arr无关
    if(initValue !== undefined){ //判断有没有初始值
        arr2.unshift(initValue) //把初始值添加到第一位
    }
    while(arr2.length > 1){
        console.log(arr2)
        arr2.splice(0,2,fn(arr2[0],arr2[1]))
    }
        return (arr2[0])
}
var arr = [3,4,5,6]
var result = reduce(arr,function(v1,v2){
  return v1 + v2
},10)
console.log(result)

将嵌套多层的数组,转换为只有一层的数组
方法①

var arr = [3,['4,5',7,[1]],[2,10]]

function flat(arr){
  var arr2 = [] //新建一个新数组
  arr.forEach(function(val){
    if(Array.isArray(val)){ //判断val是不是一个数组
      arr2 = arr2.concat(flat(val))//如果是数组,这个数组里面再flat一次,取到里面的值,再跟arr2合并
    }else{
      arr2.push(val) //如果不是数组,直接添加到arr2里面
    }
  })
  return arr2 //遍历完后返回arr2
}
var arr2 = flat(arr)
console.log(arr2)

方法②

function flatten2(arr){
    return arr.reduce(function(initArr,currentArr){
  return initArr.concat(Array.isArray(currentArr)?flatten2(currentArr):currentArr)
  },[]) 
}





上一篇 下一篇

猜你喜欢

热点阅读