==========map reduce的用法实例==================
let arr=new Array(4,1,2,3,4); item=4; console.log(count(arr,item)); //测试一个数组中是否有item元素。map filter reduce一起 // 注意参数: 必选2个 total: 初始值+ 返回值 currentValue: 当前值。 // 而且,这个必须返回之前的计算结果。返回值会作为第一个参数继续累加~ // 简单的一个箭头函数应该搞不定~~就~ // 再有,下面这样写 , 给了prev初始值0。这样数组五个元素,跑五次,不然就是四次 // 不给初始值的话 默认从第一个开始,赋值给第一个哦。一定要retrun一个 这里是prev function count(arr, item) { var cnt= arr.reduce((prev,index)=>{ if(index===item){ prev=prev+1; } console.log("之后prev",prev,"index",index); return prev; },0); return cnt; } //1 filter (filter返回一个数组~~ function count1(arr, item) { let count = arr.filter(x=>x===item); return count.length; } //2 map 对每一个都这样QAQ function count2(arr, item) { let num=0; arr.map(x=>{ x===item?num++:num; }) return num; }
虽然比不会好很多了 可是还是太基础啊
基础是第一道坎 项目是后续加分(嗯)
=========js基础部分============
1/ 七种不同的数据类型,它们是undefined(未定义), null(空),boolean(布尔型),string(字符串),symbol(符号),number(数字),和object(对象)
变量允许计算机以一种动态的形式来存储和操作数据,通过操作指向数据的指针而不是数据本身来避免了内存泄露,以上的七种数据类型都可以存储到一个变量中。
赋值: 在 JavaScript 中,你可以使用赋值运算符将值存储在变量中。
myVariable = 5;
这条语句把Number类型的值5赋给变量myVariable。
当 JavaScript 中的变量被声明的时候,程序内部会给它一个初始值undefined。当你对一个值为undefined的变量进行运算操作的时候,算出来的结果将会是NaN,NaN的意思是"Not a Number"。当你用一个值是undefined的变量来做字符串拼接操作的时候,它会输出字符串"undefined"。
2/在 JavaScript 中所有的变量和函数名都是大小写敏感的。要区别对待大写字母和小写字母。
!!!!所以我们用小驼峰命名法则.!!!
3/创建浮点数 可以直接创建. 就是可能会有四舍五入的错误..
直接乘除就可以.
注意 定义时 '1'和1不同 后面的才是数字.
还有*= -=啊。
虽然看起来b*=3 看起来很奇怪 但还是b=b*3;
4/ 字符串中有 单双引号。使用反斜杠来转义吧!
只要在"前面加一个 小小的来转移就可以
那么先从箭头函数后面开始~
【还没复制】
======================箭头函数高阶=============
从filter说起。这篇文章很好~ https://www.cnblogs.com/blogzxl/p/7017622.html
(1) 1 map相当于把每个数据都进行操作,然后返回 语义明确
funtion pow(x){ return x*x };
let arr=....
arr.map(pow)
【我们也看到了,对arr每个元素进行pow操作,map就是统领的意思~】
arr.map(String)
2 reduce 相当于对相邻两元素叠xxx(乘/加/...) 求和实例
arr=..
arr.reduce(function(x,y){
return (x+y)
}匿名函数
3 filter可以正产用 还可以接收另外两个参数,表示元素的位置和数组本身
var r = arr.filter(function (x) {
return x % 2 !== 0;
});
去重
'use strict';
var r,arr = ['apple', 'strawberry', 'banana', 'pear', 'apple', 'orange', 'orange', 'strawberry'];
r = arr.filter(function (element, index, self) {
return self.indexOf(element) === index;
});
alert(r.toString());
依靠的是indexOf总是返回第一个元素的位置,后续的重复元素位置与indexOf返回的位置不相等,因此被filter滤掉了。
4 JavaScript的Array的sort()方法
默认把所有元素先转换为String再排序,结果'10'排在了'2'的前面,因为字符'1'比字符'2'的ASCII码小。
幸运的是,sort()方法也是一个高阶函数,它还可以接收一个比较函数来实现自定义的排序。
要按数字大小排序,我们可以这么写:
复制代码
var arr = [10, 20, 1, 2];
arr.sort(function (x, y) {
if (x < y) {
return -1;
}
if (x > y) {
return 1;
}
return 0;
}); // [1, 2, 10, 20]
如果要倒序排序,我们可以把大的数放前面:
var arr = [10, 20, 1, 2];
arr.sort(function (x, y) {
if (x < y) {
return 1;
}
if (x > y) {
return -1;
}
return 0;
}); // [20, 10, 2, 1]
默认情况下,对字符串排序,是按照ASCII的大小比较的,现在,我们提出排序应该忽略大小写,按照字母序排序。要实现这个算法,不必对现有代码大加改动,只要我们能定义出忽略大小写的比较算法就可以:
复制代码
var arr = ['Google', 'apple', 'Microsoft'];
arr.sort(function (s1, s2) {
x1 = s1.toUpperCase();
x2 = s2.toUpperCase();
if (x1 < x2) {
return -1;
}
if (x1 > x2) {
return 1;
}
return 0;
}); // ['apple', 'Google', 'Microsoft']
忽略大小写来比较两个字符串,实际上就是先把字符串都变成大写(或者都变成小写),再比较。
从上述例子可以看出,高阶函数的抽象能力是非常强大的,而且,核心代码可以保持得非常简洁。
最后友情提示,sort()方法会直接对Array进行修改,它返回的结果仍是当前Array:
var a1 = ['B', 'A', 'C'];
var a2 = a1.sort();
a1; // ['A', 'B', 'C']
a2; // ['A', 'B', 'C']
a1 === a2; // true, a1和a2是同一对象
(能行吗... )arr.reduce((x,y)=> (x+y))
arr.map((x)=>(x*2));
(可以吧... 关键是得带上参数, 不然这个x哪里来的~~ )