一般使用console.log(arr)打印出数组的信息,但是用console.table(arr)方便观看
console.table(data [, columns])
data:必須是 Array || Hash 、 columns:一個包含列的名稱和 Array
console.table([“apples”, “oranges”, “bananas”]);
1、Array.prototype.filter()
-
含义:筛选过滤出适合的数据后,创建一个新的数组去存放这些数据。return一个true和false
-
代码:筛选出大于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()
-
map() 方法创建一个新数组,其结果是该数组中的每个元素是调用一次提供的函数后的返回值。
-
map()常常和forEach()做比较,他们俩的区别在于,map()可以创建一个新的数组,但是forEach返回的是undefined。
-
代码:
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);
:::
- 代码:
//sort会因为浏览器的不同,有稳定排序和不稳定排序,不稳定排序就是在你数据有比较细微的差距,在每次运行有不一样的排序
let ans = inventors.sort((a,b)=>a.year - b.year); //结果是-1,那么小的排前,为1大的排后面,0就是不改变顺序
console.table(ans);
4、Array.prototype.reduce()
- arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])
- 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);