javascript.basics icon indicating copy to clipboard operation
javascript.basics copied to clipboard

for循环,forEach,map,$.each(),some,fliter,every区别与联系。

Open Kelichao opened this issue 8 years ago • 2 comments

ES5 新增的迭代方法some,fliter,every,map,forEach

map,fliter返回数组 forEach仅仅是简化for循环 some,every返回的是true/false

some

  • some方法是有一个回调函数返回true,则返回true
var x = ([-1,2,3,4,5,6].some(function(value) {
	if (value < 0) {
		return true;
	}
}));

console.log(x);// true

fliter

  • 给定一个函数,把函数返回true的项组成一个新数组重新返回
var x = ([-1,2,3,4,5,6].fliter(function(value) {
	if (value > 0) {
		return true;
	}
}));

console.log(x);// [2, 3, 4, 5, 6]

every

  • every方法是每个回调函数都返回true,则返回true
var x = ([1,2,3,4,5,6].every(function(value) {
	if (value > 0) {
		return true;
	}
}));

console.log(x);// true

forEach(arr)

给定一个函数,不需要返回值,只是将每一项遍历一般,不影响原数组

  • 但是forEach循环会影响作用域(闭包环境)
var arr = [11,22,33];
// a:value, b:key, c:整个arr(this)
arr.forEach(function(a,b,c){
	console.log(c)
})

map(arr)

给定一个函数,需要返回值,将其其返回值组成一个新的数组,不影响原数组

var arr = [11,22,33];

// a:value, b:key, c:整个arr(this)
var arr2 = arr.map(function(a,b,c){
	return a + 1;
})

console.log(arr2)// [12, 23, 34]

所以forEach跟map的区别是 map功能更加强大,有一个返回值并构成一个新数组

for ... in(arr,obj)

最普通的遍历效果

var x = {a:2,c:3,d:{x:4,y:{z:123}}};
for (var i in x) {
	console.log(x[i]);
}
  • 会将外层的键值对都拿出来。 image

Kelichao avatar Oct 26 '16 03:10 Kelichao

已更正

Kelichao avatar Jul 07 '17 07:07 Kelichao

[].filter() 明显filter是对的。

leiiiooo avatar Oct 31 '17 01:10 leiiiooo