如果函数是两个或更多值
的数组,我可以验证它const validateZIPLength = (zip) => (
zip.length > 5 || zip.length < 5 ?
'zip code should be 5 digits': undefined
)
validateZIPLength('123')
for the above function cal, it works fine
validateZIPLength(['1234', '12345'])
它应该返回邮政编码应该是5并且未定义但它只返回邮政编码应该是5为数组中的第1项
答案 0 :(得分:1)
您的函数只能处理单个值,而不能处理数组。
以下是如何添加对数组的支持:
function validateZIPLength(zip) {
if(Array.isArray(zip)) {
for(let i = 0; i < zip.length; i++) {
zip[i] = validateZIPLength(zip[i]);
}
return zip;
} else {
return zip.length === 5 ? undefined : "zip code should be 5 digits";
}
}
console.log(validateZIPLength(['1234', '12345']));
&#13;
答案 1 :(得分:0)
validateZIPLength(['1234', '12345'])
它应该返回邮政编码应该是5并且未定义但是它是 仅返回邮政编码应为5,表示数组中的第1项
实际上,会发生的是函数validateZIPLength
返回整个数组本身所获得的内容,而不是第一个元素。传入数组时,它不知道它是否有字符串或数组,它只是根据zip.length > 5 || zip.length < 5
检查长度,因为数组也有一个{{3属性,代码按照你的指示工作 - 得到2
,因为数组中有两个元素,因此返回字符串'zip code should be 5 digits'
。
请记住,计算机是愚蠢的 - 它们会按照告诉它们的方式执行,而不一定是您想要它们的目标。
由于你有一个函数可以获取字符串并为你提供结果,但是你想将它应用于数组的许多元素,你可以使用length
来完成这一点。它需要一个函数并使用数组的每个成员调用它。然后,您将获得一个包含每个结果的新数组。
const validateZIPLength = (zip) => (
zip.length > 5 || zip.length < 5 ?
'zip code should be 5 digits': undefined
)
const singleInvalidZIPCode = validateZIPLength('123');
const singleValidZIPCode = validateZIPLength('12345');
console.log("single invalid ZIP code:", singleInvalidZIPCode);
console.log("single valid ZIP code:", singleValidZIPCode);
const multipleZIPCodes = ['1234', '12345'].map(validateZIPLength)
console.log("multiple ZIP codes:", multipleZIPCodes);