forEach有两个参数,一个是回调函数,一个是回调函数的this指向。
回调函数有三个参数,第一个是数组每一项,一个是索引,一个是数组本身。
如果没有指定 this,那 this 默认就是 window,在回调函数里面 console.log(this); 即可。
let out = [];
let arr = ['aaa', 'bbb', 'ccc'];
arr.forEach(function(item, index, arr) {
console.log(item);
this.push(item);
}, out);
console.log(out);
/*
aaa
bbb
ccc
['aaa', 'bbb', 'ccc']
*/
如上面这个例子,意思是循环输出数组 arr 的每一项,并且每一项push到 this,也就是 out,因为 this 指向 out,所以最后 out 就是 [‘aaa’, ‘bbb’, ‘ccc’]
map会生成一个跟 arr 长度一样的数组,执行完返回一些东西,不返回值就是undefined
let arr = ['aaa', 'bbb', 'ccc'];
let data = arr.map((item, index, arr) => {
});
console.log(data);
/*
[undefined, undefined, undefined]
*/
如上面这个例子,因为我没有设置 return 什么,于是打印了一个 [undefined, undefined, undefined] 的数组。
如果我们每一个都 return 1; 就生成 [1, 1, 1]
let arr = ['aaa', 'bbb', 'ccc'];
let data = arr.map((item, index, arr) => {
return 1;
});
console.log(data);
/*
[1, 1, 1]
*/
如果我们附加了条件,会怎么样呢?你应该猜到了吧?
let arr = ['aaa', 'bbb', 'ccc'];
let data = arr.map((item, index, arr) => {
if (item == 'aaa') {
return 1;
}
});
console.log(data);
/*
[1, undefined, undefined]
*/
只有这个项是 ‘aaa’ 的时候才 return 1; 所以其他的都是 undefined
filter把数组中符合条件的留下来。
let arr = ['iPhone', 'iPad', 'MacBook'];
let data = arr.filter((item, index, arr) => {
return item.includes('i');
});
console.log(data);
/*
["iPhone", "iPad"]
*/
如上面这个例子,如果这项含有 ‘i’ 才留下来,所以 'MacBook’被剔除掉了,过滤掉了,也就是 filter。
some的用法是,如果数组里有某一项符合条件就返回 true,都没有就是 false了。为了方便使用,通常把some封装一下,函数名就叫做 findInArr 吧,“在数组中找”的意思。
let findInArr = (data, val) => {
let status = data.some((item, index, data) => {
return item.includes(val);
});
console.log(status);
};
let arr = ['iPhone', 'iPad', 'MacBook'];
findInArr(arr, 'i');
findInArr(arr, 'z');
/*
true
false
*/
封装成这个函数的作用,就是判断传进去的数组某一项是否包含某个字符串,返回 true 或 false,然后打印出来。
第一次调用判断数组 arr 里面某一项是否包含 ‘i’,返回 true,第二次调用则是 ‘z’,返回 false
every跟some的差别就在于,some是一项符合条件就返回 true,而every,顾名思义,就是每一项都得符合条件才返回 true,所以代码大同小异,这个看看就懂。
let findInArr = (data, val) => {
let status = data.every((item, index, data) => {
return item.includes(val);
});
console.log(status);
};
let arr = ['iPhone', 'iPod', 'MacBook'];
findInArr(arr, 'i');
findInArr(arr, 'o');
/*
false
true
*/
第一次调用判断数组 arr 里面每一项是否包含 ‘i’,返回 false,第二次调用则是 ‘o’,返回 true
拜拜~