理解Ember应用中findSection函数的匹配逻辑及返回值
咱们一步步拆解这段Ember代码的逻辑,把每个部分说清楚:
1.
return e.id === sectionId; 的匹配逻辑 这行是过滤逻辑的核心:
- 每次遍历
sections数组里的单个元素e时,先通过!Ember.isEmpty(e)确保当前元素不是空值(比如null、undefined或者空对象) - 确认元素非空后,就判断这个元素的
id属性和传入的sectionId是否完全相等(===是全等判断,要求值和数据类型都一致,比如"123"和123不会被判定为相等) - 如果满足相等条件,就返回
true,告诉$.grep要把这个元素留下来;不满足或者元素为空时,返回false,元素会被过滤掉
2.
$.grep 方法的作用 $.grep是jQuery提供的数组过滤工具,它的工作逻辑很直白:
- 接收两个参数:要过滤的数组(这里是
sections),以及一个判断用的回调函数 - 遍历数组里的每一个元素,把元素传给回调函数
- 回调返回
true的元素会被保留到结果数组里,返回false的会被剔除 - 最终返回一个全新的、只包含符合条件元素的数组
所以这段代码里的$.grep,就是从sections数组里筛选出所有**非空且id等于sectionId**的元素。
3.
findSection 函数的返回结果 从你给出的代码片段看,result变量就是$.grep返回的过滤结果:
- 如果
sections里有1个或多个元素满足条件,result就是包含这些元素的数组 - 如果没有任何元素符合要求,
result就是一个空数组
另外补充一句:通常这类“查找”函数最后会返回result[0](取第一个匹配的元素),但你贴的代码里没写后续逻辑,所以仅从现有代码看,result是数组类型的过滤结果。
附上你的代码片段方便对照:
findSection: function(sections, sectionId) { var result = $.grep(sections, function(e){ if (!Ember.isEmpty(e)){ return e.id === sectionId; } else { return false; } }); // 后续代码... }
内容的提问来源于stack exchange,提问作者copenndthagen
相关产品推荐
相关产品推荐

