如何筛选数组中以'EV'开头的元素:针对buildEVQuestionLists函数返回结果的处理方案
如何过滤数组,仅保留以'EV'开头的元素?
假设我们有一个返回混合前缀ID数组的函数buildEVQuestionLists(category):
function buildEVQuestionLists(category) { var items = []; var mySurvey = SurveyUtil.Surveys.Get(CurrentPID()); var remoteQuestions = mySurvey.Questions; for (var i = 0; i < remoteQuestions.Count; i++) { var question = remoteQuestions[i]; if (question.IsInCategory(category)) items.push(question.Id); } return items; }
它返回的数组类似:[EV10013,EV10361,EV10022,EV10009,EV10003,EV10025,EV10020,EV10017,EV10005,EV10000,EV10043,PH10040,PH10013],现在需要处理这个结果,只保留以'EV'开头的元素,这里有几种实用的实现方式:
方案1:使用数组filter()方法(推荐,简洁高效)
如果可以直接处理函数返回的结果,用Array.filter()搭配字符串startsWith()是最简洁的写法:
// 获取原函数的完整结果 const allQuestions = buildEVQuestionLists('你的分类参数'); // 过滤仅保留EV开头的元素 const evOnlyQuestions = allQuestions.filter(id => id.startsWith('EV')); console.log(evOnlyQuestions); // 输出: [EV10013,EV10361,EV10022,EV10009,EV10003,EV10025,EV10020,EV10017,EV10005,EV10000,EV10043]
如果你的运行环境不支持ES6箭头函数或startsWith()(比如旧版IE),可以换成兼容写法:
var allQuestions = buildEVQuestionLists('你的分类参数'); var evOnlyQuestions = allQuestions.filter(function(id) { // 用indexOf判断字符串是否以EV开头,兼容所有旧环境 return id.indexOf('EV') === 0; });
方案2:直接修改原函数,收集时就过滤
如果你希望原函数直接返回过滤后的结果,可以在收集元素时多加一层判断:
function buildEVQuestionLists(category) { var items = []; var mySurvey = SurveyUtil.Surveys.Get(CurrentPID()); var remoteQuestions = mySurvey.Questions; for (var i = 0; i < remoteQuestions.Count; i++) { var question = remoteQuestions[i]; // 同时满足分类归属和EV前缀两个条件 if (question.IsInCategory(category) && question.Id.startsWith('EV')) { items.push(question.Id); } } return items; }
旧环境兼容版:
if (question.IsInCategory(category) && question.Id.indexOf('EV') === 0) { items.push(question.Id); }
方案3:传统for循环手动过滤(兼容所有环境)
如果不想用数组方法,也可以手动遍历原数组收集符合条件的元素:
var allQuestions = buildEVQuestionLists('你的分类参数'); var evOnlyQuestions = []; for (var i = 0; i < allQuestions.length; i++) { var id = allQuestions[i]; if (id.indexOf('EV') === 0) { evOnlyQuestions.push(id); } }
这样也能得到完全一致的过滤结果。
内容的提问来源于stack exchange,提问作者Andrea Springer
相关产品推荐
相关产品推荐

