Array

123 阅读3分钟

目录

  • flat() //合并数组
  • flatMap() //合并成方法的效率高一些
  • sort() //排序
  • reverse() // 反转数组
  • new Set() //Set 对象存储的值总是唯一的
  • array.filter() //过滤元素,可以将数组中不符合的元素去掉,返回一个新数组。

array.filter() 数组过滤元素

- 数组过滤元素,可以将数组中不符合的元素去掉,返回一个新数组。
- filter函数接受一个回调函数,把回调函数依次作用于元素
- 回调函数的第一个参数是元素,第二个参数是元素位置,第三个参数是数组本身
- 根据这个函数的返回值,rturn true/false, true保留该元素,false不保留该元素
示例一:

let arr = [1, 2, 3, 4, 5, 6];

let r = arr.filter(function(item){
    return item % 2 !=  0;
})
console.log(r) ;  // [1, 3, 5]
let arr = [1,2,6,3,4,5];
  let res = arr.filter(function(item,index,array){
      //元素值,元素的索引,原数组。
      return (item>3);
  });
  console.log(res);//[6, 4, 5]
//存在
var newarr = [
 { num: 1, val: 'ceshi', flag: 'aa' },
 { num: 2, val: 'ceshi2', flag: 'aa2' }
]
console.log(newarr.filter(item => item.num===2 ))
//不存在
var newarr = [
 { num: 1, val: 'ceshi', flag: 'aa' },
 { num: 2, val: 'ceshi2', flag: 'aa2' }
]
console.log(newarr.filter(item => item.num!=2 ))

new Set()

Set 对象作用\

数组去重

var arr = [1,2,3,3,1,4];
[...new Set(arr)]; // [1, 2, 3, 4]
Array.from(new Set(arr)); // [1, 2, 3, 4]
[...new Set('ababbc')].join(''); // "abc" 字符串去重
new Set('ice doughnut'); //Set(11) {"i", "c", "e", " ", "d", …}

并集

var a = new Set([1, 2, 3]);
var b = new Set([4, 3, 2]);
var union = new Set([...a, ...b]); // {1, 2, 3, 4}

交集

var a = new Set([1, 2, 3]);
var b = new Set([4, 3, 2]);
var intersect = new Set([...a].filter(x => b.has(x))); // {2, 3}

差集

var a = new Set([1, 2, 3]);
var b = new Set([4, 3, 2]);
var difference = new Set([...a].filter(x => !b.has(x))); // {1}

flat()

flat() 方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。

  var arr3 = [1, 2, [3, 4, [5, 6, [7, 8]]]];
  arr3.flat(2);
  // [1, 2, 3, 4, 5, 6]

  //使用 Infinity 作为深度,展开任意深度的嵌套数组
  arr3.flat(Infinity);
 // [1, 2, 3, 4, 5, 6, 7, 8]

flatMap()

flatMap() 方法首先使用映射函数映射每个元素,然后将结果压缩成一个新数组。它与 map 和 深度值1的 flat 几乎相同,但 flatMap 通常在合并成一种方法的效率稍微高一些。 这里我们拿map方法与flatMap方法做一个比较。

var arr1 = [1, 2, 3, 4];
 
arr1.map(x => [x * 2]); 
// [[2], [4], [6], [8]]
 
arr1.flatMap(x => [x * 2]);
// [2, 4, 6, 8]
 
// 只会将 flatMap 中的函数返回的数组 “压平” 一层
arr1.flatMap(x => [[x * 2]]);
// [[2], [4], [6], [8]]

sort()

var ar1=[2,4,6,8,1,3]
var ar2=[2,16,36,8,56]
ar1.sort()
ar2.sort()//这个方法值只能排序第一位数  也可以字符串进行排序
console.log(ar1)//[1,2,3,4,6,8]
console.log(ar2)//[16, 2, 36, 56, 8]

ar2.sort(function(a,b){
    return a-b //a-b为升序
    //return b-a  //b-a为降序
})
console.log(ar2)//[2, 8, 16, 36, 56]

reverse()

var ar1=[2,4,6,8,1,3]
ar1.reverse()//此方法为倒序,也就是反过来。并不会进行大小排序
console.log(ar1)//[3, 1, 8, 6, 4, 2]

冒泡排序

//每轮依次比较相邻两个数的大小,后面比前面小则交换
var b=0//设置用来调换位置的值
var a=[1,9,33,2,5,34,23,98,14]//冒泡排序
for(var i=0;i<a.length;i++){
    for(var j=0;j<a.length;j++){
        if(a[j]>a[j+1]){
            b=a[j]
            a[j]=a[j+1]
            a[j+1]=b
        }
    }
}
console.log(a)//[1, 2, 5, 9, 14, 23, 33, 34, 98]