jha*_*amm 18 javascript arrays underscore.js
我有一个函数,用于映射数组underscore.这是功能:
var services = _.map(userCopy.get('services'), function (service) {
if (service.service_selected === true) {
return service;
}
});
Run Code Online (Sandbox Code Playgroud)
我的问题是,当conditional === false我,然后我被undefined投入services.当然我可以删除undefined,但这很难看,我只是想map正确使用.我该如何解决?
the*_*eye 36
_.map使用函数返回的任何内容来构建结果.如果函数没有显式返回任何内容,则JavaScript返回undefined.这就是为什么结果_.map有undefined每当条件失败.
你真正需要的是一个 _.filter
var services = _.filter(userCopy.get('services'), function(service) {
return service.service_selected === true;
});
Run Code Online (Sandbox Code Playgroud)
_.filter接受集合和谓词函数.它将谓词函数应用于集合的每个值,如果函数返回true,则该元素将包含在结果中,如果函数返回false,则将跳过该元素.
注意:您实际上可以使用_.matcher,随着_.filter,像这样的
var isServiceSelected = _.matcher({
service_selected: true;
});
var services = _.filter(userCopy.get('services'), isServiceSelected);
Run Code Online (Sandbox Code Playgroud)
如果您要根据service_selected: true条件多次过滤,这将非常有用.如果它只是一次性的事情,那么_.where下面显示的将是更好的选择.
您也可以使用_.where,只有当前对象包含列出的所有键值对时才能返回对象,如下所示
var services = _.where(userCopy.get('services'), {
service_selected: true;
});
Run Code Online (Sandbox Code Playgroud)
现在,将返回service_selected属性值为的所有服务对象true.
演示:
function display(heading, data) {
var json = JSON.stringify(data, null, 4);
document.body.appendChild(document.createElement('h3')).innerHTML = heading;
document.body.appendChild(document.createElement('pre')).innerHTML = json;
}
var data = [{
"name": "auth",
"service_selected": true
}, {
"name": "authorization",
"service_selected": false
}, {
"name": "faltu",
"service_selected": true
}];
display("_.filter", _.filter(data, function (service) {
return service.service_selected === true;
}));
display("_.matcher", _.filter(data, _.matcher({
service_selected: true
})));
display("_.where", _.where(data, {
service_selected: true
}));Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15513 次 |
| 最近记录: |