whkl/blog

javaScript操作数组的常用方法

Opened this issue · 0 comments

whkl commented

map(映射), reduce(规约), forEach(遍历), filter(过滤),它们都是高阶函数,都是以传入不同的函数来以不同的方式操作数组元。ie都不支持

判断是否为数组

  • Array.isArray(ele)
Array.isArray({})
//=>false
Array.isArray('')
//=> false
Array.isArray([])
//=>true

查找数组内指定元素位置

  • indexOf(ele) / .lastIndexOf(ele)
[1,2,3,4,2,3].indexOf(2)  //= > 1   从左到右返回第一个匹配的
[1,2,3,4,2,3].lastIndexOf(2) //=>   4   从右到左第一个匹配元素的位置

遍历数组

  • forEach 为每个元素执行对应的方法
    遍历数组,参数为一个回调函数,回调函数有三个参数:当前元素,元素索引,整个数组
var a=new Array(1,2,3,4,5,6)
a.forEach(function(val,i,array){  //
       a[i]=val+1;
});
  • map 遍历数组 ,参数为一个回调函数,返回一个新数组
var a=new Array(1,2,3,4,5,6)
a.map((e,i)=>{
	return e*e
});
//=>[1, 4, 9, 16, 25, 36]
  • .reduce(function(v1,v2),value) / .reduceRight(function(v1,v2),value)
    遍历数组,方法有两个参数
  1. 回调函数,把两个值合为一个,并返回结果
  2. value ,一个初始值,可选
//不传initialValue值
var arr = [1,2,3];
arr.reduce(function(pre,cur,index,arr){return pre+cur});
//结果 6
//累加了两次

// 传入initialValue 值

var arr = [1,2,3]
arr.reduce(function(pre,cur,index,arr){return pre+cur},10);
//结果16
//累加了3次,初始值为10
//拼接所有的数组
var flattened = [[0, 1], [2, 3], [4, 5]].reduce( ( acc, cur ) => acc.concat(cur));

//输出[0, 1, 2, 3, 4, 5]
  • filter(function(ele))
    返回原数组的一个子集,回调函数逻辑判断为true则返回,为false和索引为空则不返回,原数组保持不变
//排除掉小于10的值
var isBigEnough=(element)=> {
  return element >= 10;
}
var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
// filtered is [12, 130, 44]

数组转字符串

  • join() 将数组里面的所有项拼接成一个字符串
var a=[1,2,3,9,7]
a.join(',')
//=>"1,2,3,9,7"
//注意原数组不会被改变

数组去重

  • 用到Set对象和 Array.from()方法
a=[1,2,3,4,3,3,3,2]
var arr=new Set(a)
Array.from(arr)
//=>[1, 2, 3, 4]
或者  [...new Set(a)] 使用拓展运算符
  • filter 删除重复项
indexOf从左到右查返回第一个匹配,如果索引不等于当前遍历值那边就是重复数据就过滤掉了
arr.filter((item, pos) => arr.indexOf(item) === pos)
  • foreach 去重
let arr = ['1', '2', '3', '1', 'a', 'b', 'b']
const unique = arr => {
    let obj = {}
    arr.forEach(value => {
        obj[value] = 0
    })
    return Object.keys(obj)
}
console.log(unique(arr))  // ['1','2','3','a','b']

*reduce 去重

let arr = ['1', '2', '3', '1', 'a', 'b', 'b']
const unique = arr.reduce((map, item) => {
    map[item] = 0
    return map
}, {})
console.log(Object.keys(unique))  // ['1','2','3','a','b']
翻转字符串
let str ="Hello Dog";
const reverseString = str =>{
    return [...str].reverse().join("");
}

console.log(reverseString(str)) // goD olleH