不改变原数组,不创建新数组: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
})