`javascript中的map`和'filter'
具有以下输入:`javascript中的map`和'filter',javascript,node.js,Javascript,Node.js,具有以下输入: var m = [{ name: 'foo', routes: [{verb: 'post', path: '/foo1'}, {verb: 'get', path: '/foo2'}] }, { name: 'bar', routes: [{verb: 'put', path: '/:id'}]}, { name: '__ignoreme', routes: [{verb: 'post', path: '/ba
var m = [{
name: 'foo',
routes: [{verb: 'post', path: '/foo1'},
{verb: 'get', path: '/foo2'}]
}, {
name: 'bar',
routes: [{verb: 'put', path: '/:id'}]},
{
name: '__ignoreme',
routes: [{verb: 'post', path: '/baz1'},
{verb: 'get', path: '/baz2'}]
}]
使用map
和filter
我想实现:
var desired = [
'foo POST /foo1',
'foo GET /foo2',
'bar PUT /:id',
]
完整代码:
var m = [{
name: 'foo',
routes: [{verb: 'post', path: '/foo1'},
{verb: 'get', path: '/foo2'}]
}, {
name: 'bar',
routes: [{verb: 'put', path: '/:id'}]},
{
name: '__ignoreme',
routes: [{verb: 'post', path: '/baz1'},
{verb: 'get', path: '/baz2'}]
}]
var desired = [
'foo POST /foo1',
'foo GET /foo2',
'bar PUT /:id',
]
var myOutput = m
.filter(function (m) {
return m.name.indexOf('__') === -1;
})
.map(function (m) {
return [
m.name,
m.routes[0].verb.toUpperCase(), // I should loop through my array instead of getting just the first element
// But can I loop through the array in my map?
m.routes[0].path
].join(' ');
});
console.log('>myOutput:', myOutput);
// What I achieve which is not desired :
// [
// 'foo POST /foo1',
// 'foo PUT /:id',
//]
这是我的代码中使用的结构,我希望通过微小的更改实现所需的输出,并且仍然使用
map
和filter
您可以在map函数中使用循环,以确保查看给定名称的所有路由。这将返回一个数组,因此我在映射后使用reduce将其展平为单个字符串数组
var myOutput = m
.filter(function (m) {
return m.name.indexOf('__') === -1;
})
.map(function (m) {
var arr = [];
for(var i = 0; i < m.routes.length; i++){
arr.push([
m.name,
m.routes[i].verb.toUpperCase(),
m.routes[i].path
].join(' '));
}
return arr;
}).reduce(function(prev, cur){
return prev.concat(cur);
});
var myOutput=m
.过滤器(功能(m){
返回m.name.indexOf(''uuu')=-1;
})
.map(功能(m){
var-arr=[];
对于(变量i=0;i
这会导致myOutput的
[“foo POST/foo1”、“foo GET/foo2”、“bar PUT/:id”]
您需要在每个项目中迭代您的路由
数组,并映射值以获得动词
和路径
var m=[{
名称:“foo”,
路由:[{动词'post',路径:'/foo1'},
{动词'get',路径:'/foo2'}]
}, {
名称:'酒吧',
路由:[{动词'put',路径:'/:id'}]},
{
姓名:“_ignoreme”,
路由:[{动词'post',路径:'/baz1'},
{动词'get',路径:'/baz2'}]
}]
所需变量=[
‘foo POST/foo1’,
“foo-GET/foo2”,
'bar PUT/:id',
]
var myOutput=m
.过滤器(功能(a){
返回a.name.indexOf(“”(uuu))=-1;
})
.map(功能(a){
返回a.routes.map(函数(项){
返回[
a、 名字,
item.verb.toUpperCase(),
item.path
].加入(“”);
});
})
.减少(功能(上一个,当前){
返回上一个concat(当前);
})
编写('>myOutput:',myOutput)代码>过滤输入后,可以将每组路由转换为所需格式,然后使用将这些阵列连接在一起:
var m=[
{
名称:“foo”,
路线:[
{动词'post',路径:'/foo1'},
{动词'get',路径:'/foo2'}]
},{
名称:'酒吧',
路线:[
{动词'put',路径:'/:id'}]
},{
姓名:“_ignoreme”,
路线:[
{动词'post',路径:'/baz1'},
{动词'get',路径:'/baz2'}]
}
];
变量过滤器=函数(a){
返回a.filter(函数(x){
返回x.name!='\u ignoreme';
});
};
var format=函数(名称、路由){
返回name++''+route.verb.toUpperCase()++''+route.path;
};
变量过程=函数(a){
如果(!a.长度){
返回[];
}
返回[0].routes.map(函数(r){
返回格式(a[0]。名称,r);
}).concat(过程(a.slice(1));
}
console.log(进程(过滤器(m))代码>是的,有没有办法循环到我的数组中?我不明白,您希望输出中出现'foo GET/foo2'
?但是您已经明确地将其过滤掉了。是的,如何在map
函数中循环到路由数组中?