JavaScript数组函数

一般使用console.log(arr)打印出数组的信息,但是用console.table(arr)方便观看
在这里插入图片描述

console.table(data [, columns])

data:必須是 Array || Hash 、 columns:一個包含列的名稱和 Array

console.table([“apples”, “oranges”, “bananas”]);

1、Array.prototype.filter()

  1. 含义:筛选过滤出适合的数据后,创建一个新的数组去存放这些数据。return一个true和false

  2. 代码:筛选出大于1500年,小于1600年的值

//三种方法,最后一种是非常省略的箭头函式
let ans = inventors.filter(function(inventor){
    return inventor.year >= 1500 && inventor.year <1600
  });

  let ans = inventors.filter((inventor)=>{
    return inventor.year >= 1500 && inventor.year <1600
  });

  let ans = inventors.filter(inventor=> inventor.year >= 1500 && inventor.year <1600
  );
  console.table(ans);

2、Array.prototype.map()

  1. map() 方法创建一个新数组,其结果是该数组中的每个元素是调用一次提供的函数后的返回值。

  2. map()常常和forEach()做比较,他们俩的区别在于,map()可以创建一个新的数组,但是forEach返回的是undefined。
    在这里插入图片描述

  3. 代码:

let ans1 = inventors.map(inventor => inventor.first + ' ' + inventor.last);

let ans2 = inventors.forEach(inventor => inventor.first + ' ' + inventor.last)

let ans3 = []
inventors.forEach(inventor => ans3.push(inventor.first + ' ' + inventor.last))

console.table(ans1);
console.table(ans2);
console.table(ans3);

3、Array.prototype.sort()

:::知识点
compareFunction(a, b) 小于 0 ,那么 a 会被排列到 b 之前;

如果 compareFunction(a, b) 等于 0 , a 和 b 的相对位置不变。备注: ECMAScript 标准并不保证这一行为,而且也不是所有浏览器都会遵守(例如 Mozilla 在 2003 年之前的版本);

如果 compareFunction(a, b) 大于 0 , b 会被排列到 a 之前。

compareFunction(a, b) 必须总是对相同的输入返回相同的比较结果,否则排序的结果将是不确定的。

//sort 方法可以使用 函数表达式 方便地书写:

var numbers = [4, 2, 5, 1, 3];
numbers.sort(function(a, b) {
  return a - b;
});
console.log(numbers);

//也可以写成:
var numbers = [4, 2, 5, 1, 3];
numbers.sort((a, b) => a - b);
console.log(numbers);

:::

  1. 代码:
//sort会因为浏览器的不同,有稳定排序和不稳定排序,不稳定排序就是在你数据有比较细微的差距,在每次运行有不一样的排序

let ans = inventors.sort((a,b)=>a.year - b.year); //结果是-1,那么小的排前,为1大的排后面,0就是不改变顺序
console.table(ans);

在这里插入图片描述

4、Array.prototype.reduce()

  1. arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])
  2. reduce为数组中的每一个元素依次执行callback函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:①accumulator 累计器 ②currentValue 当前值 ③currentIndex 当前索引 ④array 数组
//方法一:
  let total = 0 ;
  inventors.forEach((inventor)=>{
    total += inventor.passed - inventor.year
  })
  console.log(total);

  //方法二:
  let ans = inventors.reduce((total,inventor)=>{
    return total + inventor.passed - inventor.year;
  },0)//设置初始位置,如果不设置,那么一开始就从1开始索引
  console.log(ans);

5、Sort the inventors by years lived

inventors.forEach((inventor)=>{
    inventor.years = inventor.passed - inventor.year;
  })

  let ans = inventors.sort((a,b)=>{
    return (a.passed - a.year) - (b.passed - b.year);
  })
  console.table(ans);

6、create a list of Boulevards in Paris that contain ‘de’ anywhere in the name

let category = document.querySelector('.mw-category')
  let links = Array.from(category.querySelectorAll('a'))
  let de = links
          .map(link => link.textContent)
          .filter(streetName => streetName.includes('de'))

7、排列名字从a-z,z-a

let alphabetically = people.sort(function(a,b){
    let [alast, afirst] = a.split(', ')
    let [blast, bfirst] = b.split(', ')
    return alast > blast ? 1 : -1
  })
  console.table(alphabetically);

  //a-z
  let ans = people.sort((a,b)=>{
    let [afirst,alast ] = a.split(', ')
    let [bfirst,blast ] = b.split(', ')

    /*if(alast >blast){1}
    else if(blast > alast){-1}
    else{0}
    */
      return alast > blast ? 1 : blast > alast ? -1 : 0//连续的三元运算,如果a>b,那么是1,如果没有,判断b>a,如果是为-1,否则是0.
  })

8、Reduce Exercise

const data = ['car', 'car', 'truck', 'truck', 'bike', 'walk', 'car', 'van', 'bike', 'walk', 'car', 'van', 'car', 'truck' ];

    let ans = data.reduce((obj,content)=>{
      if(!obj[content]) obj[content] = 1
      else obj[content] += 1

      return obj
    },{})

  console.table(ans);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值