3 回答
TA贡献2051条经验 获得超10个赞
当 时,您不会返回任何东西postcode.length > 1
。
相反,您正在遍历postcode
数组。函数内的 returnforEach
不执行任何操作。
您需要决定该函数应返回什么。它应该只返回一个布尔值还是一个布尔值数组?
对于单个布尔值,您需要every
或some
。
布尔数组只需使用map
.
TA贡献1853条经验 获得超9个赞
postcode
始终作为数组事件出现,您没有将任何参数传递给函数。即使您返回值,您也会迭代
postcode
数组forEach
,但 的结尾forEach
将返回,而不是undefined
按您的预期返回。boolean
array
我使用了每种方法来测试所有元素是否通过
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));
};
添加回答
举报