我是新来的React和javascript,试图将以下代码重构为更少的行:
for (const email of processedData) {
if (validateEmail(email)) {
count++;
if (count === 100) {
break;
}
}
}
processedData是电子邮件列表,尝试使用reduce进行操作,但是在reduce中,一旦计数=== 100,我就无法中断
谢谢
答案 0 :(得分:4)
至少循环体可以轻松压缩:
'cat'
很难使其更短。 > _>
答案 1 :(得分:4)
Array.prototype.some将在数组的元素上运行一个函数,直到该函数返回true。
然后您可以执行以下操作:
编辑:我的第一个建议的单行版本。
var processedData = ["joe@test.co.uk", "john@test.co.uk", "jack@test.com", "jane@test.com", "amy@test.com"];
var count = 0;
processedData.some(email => validateEmail(email) && (++count === 2));
function validateEmail(email) {
console.log("validateEmail " + email);
return (email.indexOf(".com") > -1);
}
答案 2 :(得分:1)
好吧,如果您只想拥有一个包含100个项目的数组,那么这可能会有所帮助。在数据数组上应用.filter(),然后将其切成100。
processedData.filter(email => validateEmail(email)).slice(0,100)
答案 3 :(得分:0)
我认为...应该有所帮助,但可能是重构的更好方式(一如既往)
for(const email of processedData){
if(validateEmail(email) && count != 100) count++
}
答案 4 :(得分:0)
如何使用下面的循环?
for(let i=0,count=0; i < processedData.length && count<100; i++){
count+=validateEmail(processedData[i])
}