数组的some,every,find,map,filter,reduce,forEach比较

不改变原数组,不创建新数组:some,every,find
不改变原数组,创建新数组:map,filter,reduce
遍历:forEach

some:

若目标数组中有一个或一个以上的对象符合条件的返回true,否则返回false

var computers = [{
    
    
		name: "Apple",
		ram: 8
	},
	{
    
    
		name: "IBM",
		ram: 4
	},
	{
    
    
		name: "Acer",
		ram: 32
	},
];
var some = computers.some(function(computer) {
    
    
	return computer.ram > 16;
});
console.log(some); //true
console.log(computers); //[{ name: "Apple", ram: 8 },{ name: "IBM", ram: 4 },{ name: "Acer", ram: 32 }]

every:

若目标数组中每一个对象都符合条件则返回true,否则返回false

var computers = [{
    
    
		name: "Apple",
		ram: 8
	},
	{
    
    
		name: "IBM",
		ram: 4
	},
	{
    
    
		name: "Acer",
		ram: 32
	},
];
var every = computers.every(function(computer) {
    
    
	return computer.ram > 16;
});
console.log(every); //false

find:

在数组中找到符合要求的对象 和filter的区别就是找到符合要求的对象就停止寻找了,返回的是一个对象,而filter返回的是所有符合要求的对象组成的新数组

//假定有一个对象数组,找到符合条件的对象
var users = [{
    
    
		name: 'Jill'
	},
	{
    
    
		name: 'Alex',
		id: 1
	},
	{
    
    
		name: 'Bill'
	},
	{
    
    
		name: 'Alex'
	},
];
var user = users.find(function(user) {
    
    
	return user.name === 'Alex';
});
console.log(user); //[{ name: 'Alex', id: 1 }]
//假定有一个对象数组(A),根据指定对象的条件找到数组中符合条件的对象
var posts = [{
    
    
		id: 1,
		title: "Node.js"
	},
	{
    
    
		id: 2,
		title: "React.js"
	},
];
var comment = {
    
    
	postId: 1,
	content: 'hello'
};

function postForComment(posts, comment) {
    
    
	return posts.find(function(post) {
    
    
		return post.id === comment.postId
	})
};
console.log(postForComment(posts, comment)); //{ id: 1, title: "Node.js" }

filter:

filter为“过滤”。数组filter后,返回过滤后的新数组

//假定有一个对象数组(A),获取数组中指定类型的对象放到B数组中
var products = [{
    
    
		name: "cucumber",
		type: "vegetable"
	},
	{
    
    
		name: "banana",
		type: "fruit"
	},
	{
    
    
		name: "celery",
		type: "vegetable"
	},
	{
    
    
		name: "orange",
		type: "fruit"
	},
];
var filtered = products.filter(function(product) {
    
    
	return product.type === "vegetable"
});
console.log(filtered); //[{ name: "cucumber", type: "vegetable" }, { name: "celery", type: "vegetable" }]
console.log(products) //[{ name: "cucumber", type: "vegetable" },{ name: "banana", type: "fruit" },{ name: "celery", type: "vegetable" },{ name: "orange", type: "fruit" }]

//假定有一个对象数组(A),过滤掉不满足以下条件的对象
//条件:蔬菜 数量大于0 价格小于10
var products = [{
    
    
		name: "cucumber",
		type: "vegetable",
		quantity: 0,
		price: 1
	},
	{
    
    
		name: "banana",
		type: "fruit",
		quantity: 10,
		price: 16
	},
	{
    
    
		name: "celery",
		type: "vegetable",
		quantity: 30,
		price: 8
	},
	{
    
    
		name: "orange",
		type: "fruit",
		quantity: 3,
		price: 6
	},
];
filters = products.filter(function(product) {
    
    
	return product.type === 'vegetable' &&
		product.quantity > 0 &&
		product.price < 10
});
console.log(filters); //[{ name: "celery", type: "vegetable", quantity: 30, price: 8 }]

map:

原数组被“映射”成对应新数组,返回一个新数组

//假定有一个数值数组(A),将A数组中的值以双倍的形式放到B数组
var numbers = [1, 2, 3, 4, 5];
var doubled = numbers.map(function(number) {
    
    
	return number * 2;
})
console.log(doubled); //[2,4,6,8,10]


//假定有一个对象数组(A),将A数组中的对象某个属性的值存储到B数组中
var cars = [{
    
    
		model: 'Buick',
		price: 'cheap'
	},
	{
    
    
		model: 'BMW',
		price: 'expensive'
	},
];
var prices = cars.map(function(car) {
    
    
	return car.price;
});
console.log(prices) //(2) ["cheap", "expensive"]

reduce:

常用于叠加,可以代替forEach等

//计算数组中所有值的总共
var numbers = [10, 20, 30];
var sumValue = numbers.reduce(function(sum, number) {
    
    
	return sum += number;
}, 0);//这里的0是sun的初始值,如果是100,则sumValue就是160了
console.log(sumValue); //60

//使用reduce能同时实现map和filter,reduce能遍历数组两遍
const numberss = [10, 20, 30, 40];
const doubleedOver50 = numberss.reduce((finalList, num) => {
    
    
	num = num * 2;
	if (num > 50) {
    
    
		finalList.push(num);
	}
	return finalList;
}, []);
console.log(doubleedOver50); //[60,80]

//将数组中对象的某个属性抽离到另外一个数组中
var primaryColors = [{
    
    
		color: 'red'
	},
	{
    
    
		color: 'yellow'
	},
	{
    
    
		color: 'blue'
	},
];
var color = primaryColors.reduce(function(previous, primaryColor) {
    
    
	previous.push(primaryColor.color);
	return previous;
}, []);
console.log(color); //["red", "yellow", "blue"]


// 判断字符串括号是否对称,遇到(时加1,遇到)时减1
function balancedParens(string) {
    
    
	return !string.split("").reduce(function(previous, char) {
    
    
		if (previous < 0) {
    
    
			return previous
		}; //若")"比"("先出现
		if (char == "(") {
    
    
			return ++previous
		};
		if (char == ")") {
    
    
			return --previous
		};
		return previous;
	}, 0);
};
console.log(balancedParens(")((()))")); //false

foreach:

ES6新增的一种循环

var colors = ['red', 'blue', 'green']
colors.forEach(function(color) {
    
    
	console.log(color); //red blue green
})

猜你喜欢

转载自blog.csdn.net/qq_39141511/article/details/108792901
今日推荐