我们可以尝试的把部分的for循环使用.map()、.filter()、.reduce()进行合理灵活使用。确保我们减少代码量的同时更容易阅读,让我们代码更加具有艺术感。
现在来分析两个阵列的方法是一个非常使用的Js开发者工具:.some()和.find()
使用some
此数组方法可帮助您确定其一个或多个值是是否与您查找的内容相对应。我们来讲述一个例子来说明。
// 是否会员 isMember: true-是,fasle-否
var users = [
{id:10,name:"Jack",isMember:false},
{id:11,name:"Leng",isMember:true},
{id:12,name:"Lucky",isMember:false},
{id:13,name:"Tina",isMember:false}
];
需求:现在有一个会员体系,我想从中知道用户是游客还是会员。
var listHasMembers = false;
users.forEach(e => {
if(e.isMember){
listHasMembers = true;
}
});
console.log(listHasMembers)
// > true
我们尝试使用.some()来实验一下。
var listHasMembers2 = users.some(e => {
return e.isMember
});
console.log(listHasMembers2)
// > true
提醒:我们使用更简洁地使用箭头函数(需要ES6支持,Babel或TypeScript)
传递.some一个函数作为参数。该函数正对数组中的每个值运行。然后,可以看到该值是否符合您编写的条件。该函数必须返回一个布尔值。一旦true归还,.some()本身就会归还true。如果没有一个值,则在您的条件下进行处理时,返回true(如果他们全部都返回false),.some()则将返回false。
注意: 一旦
true返回单个值,.some()将停止检查其他数组值。在上面的例子中,该功能仅仅运行了两次,第二个用户冷是会员用户。无需检查其他用户。如果某些数组值与要查找的内容相对应,.some()则将返回ture,反之则反。
使用every
正如注释中所指出的那样,您知道还可以使用来检查数组的每个值是否都符合您的条件.every()。它的工作方式完全一样.some(),但是true 仅在每次匹配时才返回。
使用find
这个数组方法完全按照它说的去做:它找到您要寻找的东西。简而言之,.find()将返回与传递的条件相对应的第一个值。让我们看看使用与之前相同数据的数据。
// 是否会员 isMember: true-是,fasle-否
var users = [
{id:10,name:"Jack",isMember:false},
{id:11,name:"Leng",isMember:true},
{id:12,name:"Lucky",isMember:false},
{id:13,name:"Tina",isMember:false}
];
与之前相同,只是这次我们不问自己是否有会员在我们的行列中,而是希望获得该会员的详情!让我们使用以下命令输出所需的值.find():
const firstUser = users.find( e => e.isMember)
console.log(firstUser)
// > Object { id: 11, name: "Leng", isMember: true }
上面的代码与完全相同.some(),唯一的区别是我们将其更改some为find。但是现在,它不返回布尔值,而是返回列表中的第一个会员。
特别说明:
.find()将返回第一个匹配。如果更多的值符合您的条件,那将无关紧要。只返回匹配第一个。如果您需要所有匹配项的列表,你需要使用.filter来代替.find()
如果找不到匹配项,.find()将返回undefined。
// 是否会员 isMember: true-是,fasle-否
var users = [
{id:10,name:"Jack",isMember:false},
{id:11,name:"Leng",isMember:false},
{id:12,name:"Lucky",isMember:false},
{id:13,name:"Tina",isMember:false}
];
const firstUser = users.find( e => e.isMember)
console.log(firstUser)
// > undefined
优点
使用.find()和.some()代替.for或代替常见的循环.forEach()不仅使您的代码更短,而且使您的目的更清晰。循环可用于执行任何操作,但使用的.find()状态是您正在寻找一个特定的数组项。至于.some(),您正在清楚地检查数组是否包含符合您需要的项目。
让您的代码更清晰!使用相关时.find()和.some()。
结语
对了,希望您学到了一些新知识。与您的其他开发人员共享知识!让代码更简单。
由于参考资料考虑到国外地址无法访问,这里进行改成中文描述笔记,并通过个人的实践操作,做的笔记。
Keep coding!
参考资料:
- [1] https://medium.com/poka-techblog/simplify-your-javascript-use-some-and-find-f9fb9826ddfd
- [2] https://medium.com/poka-techblog/simplify-your-javascript-use-map-reduce-and-filter-bd02c593cc2d