如何检查对象数组元素字符长度及实现Mongoose评论长度验证
问题解答
1. 检查对象中数组内元素的字符长度是否超过3个字符
用原生JavaScript就能轻松搞定,核心思路就是遍历数组里的每个元素,检查它的length属性就行。给你举个实际例子:
假设你有这样一个对象:
const myObj = { tags: ["js", "react", "nodejs", "a"] };
方式一:找出所有超长元素
如果想明确知道哪些元素超长,可以用filter方法筛选:
function findLongElements(obj, arrayProp) { const targetArray = obj[arrayProp]; const longItems = targetArray.filter(item => item.length > 3); if (longItems.length) { console.log("这些元素长度超过3个字符:", longItems); return true; } else { console.log("所有元素长度都≤3个字符"); return false; } } // 调用函数检查 findLongElements(myObj, "tags");
方式二:快速判断是否存在超长元素
如果只需要知道有没有超长元素,用some方法更简洁:
const hasLongItems = myObj.tags.some(item => item.length > 3); console.log(hasLongItems); // 输出true,因为"react"和"nodejs"都超长
2. 修复Mongoose Schema中的评论长度验证问题
你的问题大概率是自定义验证函数checkComment的写法不符合Mongoose的规则,导致验证逻辑失效。给你两种靠谱的解决方案:
方案一:用Mongoose内置的长度验证器(推荐)
Mongoose的String字段支持直接配置minlength和maxlength,还能自定义错误提示,简单不容易出错:
const CommentsSchema = new Schema({ comments: [{ comment: { type: String, required: true, // 可选:强制评论不能为空 minlength: [3, "评论长度不能少于3个字符"], maxlength: [150, "评论长度不能超过150个字符"] }, commentator: { type: String } }] });
方案二:自定义验证函数(正确写法)
如果坚持要用自定义函数,要确保它符合Mongoose的要求:接收字段值为参数,返回布尔值,或者抛出错误。示例如下:
// 定义符合规则的验证函数 function checkComment(value) { // 确保值存在,且长度在3-150之间 return value && value.length >= 3 && value.length <= 150; } const CommentsSchema = new Schema({ comments: [{ comment: { type: String, validate: { validator: checkComment, message: props => `${props.value} 不符合评论长度要求(需3-150字符)` } }, commentator: { type: String } }] });
测试的时候,尝试保存长度不符合要求的评论,Mongoose会抛出明确的验证错误,这样就能保证数据库里的评论都符合长度限制啦~
内容的提问来源于stack exchange,提问作者Dejan Jankov
相关产品推荐
相关产品推荐

