3 回答
TA贡献2051条经验 获得超10个赞
当 时,您不会返回任何东西postcode.length > 1。
相反,您正在遍历postcode数组。函数内的 returnforEach不执行任何操作。
您需要决定该函数应返回什么。它应该只返回一个布尔值还是一个布尔值数组?
对于单个布尔值,您需要every或some。
布尔数组只需使用map.
TA贡献1853条经验 获得超9个赞
postcode始终作为数组事件出现,您没有将任何参数传递给函数。即使您返回值,您也会迭代
postcode数组forEach,但 的结尾forEach将返回,而不是undefined按您的预期返回。booleanarray我使用了每种方法来测试所有元素是否通过
postcode测试。这里它应该适用true于所有元素,false如果有的话它会是false为了避免每次返回
true都是空数组,我们应该检查postcode.length > 0.
这是代码:
const validatePostcode = (...postcode) => {
const postcodeRegex = /^[A-Z]{1,2}[0-9]{1,2}[A-Z]{0,1} ?[0-9][A-Z]{2}$/i;
return postcode.length > 0 && postcode.every(item => postcodeRegex.test(item));
};
TA贡献1824条经验 获得超8个赞
forEach 方法并不意味着返回任何值:lambda 的返回值被丢弃。这就是为什么你得到未定义的原因。也是if... else...没用的。forEach 对于只有一个元素的数组效果很好。您需要一个接受 lmbda 并返回值的函数。根据您的需要every,它可能是(如果所有邮政编码匹配,则返回 true)或者可能map(返回一个布尔数组,每个传递的邮政编码一个)或some(如果至少一个邮政编码匹配,则返回 true)
const validatePostcode = (...postcode) => {
const postcodeRegex = /^[A-Z]{1,2}[0-9]{1,2}[A-Z]{0,1} ?[0-9][A-Z]{2}$/i;
return postcode.map(item => postcodeRegex.test(item));
};
const validateAtLeastOnePostcode = (...postcode) => {
const postcodeRegex = /^[A-Z]{1,2}[0-9]{1,2}[A-Z]{0,1} ?[0-9][A-Z]{2}$/i;
return postcode.some(item => postcodeRegex.test(item));
};
添加回答
举报
