突然发现这个下面每一个例子都很有意思,所以这个要在重新看一遍https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce
reduce
1 .arr.reduce(callback,[initialValue])
2 .callback(a,b,c,d)
a.累加器累计回调的返回值,是上一次调用的返回值,或者是initialValue
b.数组中正在处理的元素
c.正在处理当前元素的索引,如果提供了initialValue,则起始索引号为0,否则为1.
d.调用reduce的数组
3 .initialValue:作为第一次调用callback函数时的第一个参数的值。如果没有提供初始值,则将使用数组中的第一个元素
4 .合并数组,将数组转为1维数组
let arr=[[0, 1], [2, 3], [4, 5]]
c(arr.reduce((a,b)=>{
return [...a,...b]
}))
5 .计算元素中每个元素出现的次数
let x=fruits.reduce((a,b)=>{
if(b in a){
a[b]++;
}else{
a[b]=1;
}
return a;
},{})
6 .数组里面所有值的和
let arr=[1,2,,3,4,5]
c(arr.reduce((a,b)=>{
return a+b
},100))
//设置了100作为初始值
7 .按照属性对object分类
let obj=[
{ name: 'Alice', age: 21 },
{ name: 'Max', age: 20 },
{ name: 'Jane', age: 20 }
]
function groupBy(objectArray,property){
return objectArray.reduce((acc,obj)=>{
let key =obj[property]
if(!acc[key]){
acc[key]=[]
}
acc[key].push(obj)
return acc;
},{})
}
8 .数组去重:有更简单的方法
9 .合并数组对象内的某一个数组的值
10 .按照顺序执行promise函数
1 .这个其实可以就做成节流函数,必须要等另一个promise返回true的时候才执行下一个
every(fn):数组里面的每个元素都符合这个条件,否则返回false
function t(x){
return x.indexOf('a') !=-1
}
c(fruits.every(t))
filter()过滤返回符合条件的数据
var arr = [
{ id: 15 },
{ id: -1 },
{ id: 0 },
{ id: 3 },
{ id: 12.2 },
{ },
{ id: null },
{ id: NaN },
{ id: 'undefined' }
];
function t(x){
return x.indexOf('a') !=-1
}
c(fruits.filter(t))
function isNumber(obj){
return obj!=undefined && typeof(obj)==='number'&&!isNaN(obj)
}
function filterById(item){
return isNumber(item.id)&& item.id!==0
}
c(arr.filter(filterById))
find():查找数组里面是否有这一项
1 .includes好像是无法找到数组里面的对象的吧 ,关键的是includes不能传入函数
2 .关键是这个找到,只要找到,就可以做很多的操作了,比如删除,改变,增加
var inventory = [
{name: 'apples', quantity: 2},
{name: 'bananas', quantity: 0},
{name: 'cherries', quantity: 5}
];
if(inventory.includes('apples')){
c('ok')
}
let f=(item)=>{
return function(value){
return value.name===item
}
}
c(inventory.find(f('cherries')))
forEach():对数组中每个元素执行一次提供的函数
1 .如果整个数组在执行的时候数组被修改,那么执行的是改变之后的数组
2 .发生改变的地方可能会被跳过
var words = ["one", "two", "three", "four"];
words.forEach(function(word) {
console.log(word);
if (word === "two") {
words.shift();
}
});
indexOf():
1 .字符串和数组里面都有这个方法
2 .
join():把数组内的元素按照某种形式连接起来
1 .连接类数组对象
function f(a, b, c) {
var s = Array.prototype.join.call(arguments);
console.log(s); // '1,a,true'
}
f(1, 'a', true);
map():创建一个新数组,其结果是该数组中的每隔元素都调用一个提供函数后返回的结果
1 .求数组中每个元素的平方和
2 .使用map重新格式化数组中的对象
3 .
reverse()
1 .颠倒数组中的元素
2
slice(x,y):返回一个新的数组对象。这个对象是一个由x,y决定的原数组的浅拷贝,原数组不会被改变
1 .类似于python的切割字符串
2 .
split(start,deletecount,items):通过删除现有元素或添加新元素来修改数组,并以数组返回原数组中被修改的内容
1 .start:指定修改的开始位置,如果超出了数组的长度,则从数组末尾开始添加内容,如果是负值,则表示从数组末位开始的第几位
2 .deleteCount:表示要移除的数组元素的个数,如果是0或者负数,则不移除元素,这种情况下,至少应该添加一个新元素。使用这个参数老控制是删除还是填加元素
3 .items:要添加数组的元素从start位置开始,如果不指定,则splice将直删除数组元素。
4 .
toLocalString('en',{timeZone:'UTC'}):把一个数组里面的所有东西转换为一个整体的字符串
1 .a2.split(','),其实我想要的结果是让他们里面的每一项都各自转为字符串形式,然后进行操作
2 .