2016-07-25 59 views
2

在这里,我附加了我的json。如何将两个不同的数组对象放在一起

"mainSteps": [ 
    { 
    "id": "9b3b64b4-d8a5-46d5-b464-066dc5c45dc3", 
    "name": "Main Step 1", 
    "steps": [ 
     { 
     "name": "sub step 1.1" 
     }, 
     { 
     "name": "sub step 1.2" 
     } 
    ] 
    }, 
    { 
    "name": "Main step 2" 
    "steps": [ 
     { 
     "name": "sub step 2.1" 
     }, 
     { 
     "name": "sub step 2.2" 
     } 
    ], 
    }, 
    { 
    "name": "Main Step 3", 
    "steps": [ 
     { 
     "name": "sub step 3.1" 
     }, 
     { 
     "name": "sub step 3.2" 
     } 
    ], 
    } 
] 

在寻找等的输出 - > [主要步骤1,子步骤1.1,步骤子1.2],[主步骤2中,子步骤2.1,步骤子2.2],[主步骤3中,子步骤3.1,子步骤3.2]。我花了整整一天的时间来获得这个输出,但是输出的结果类似于[[Main Step 1,Main Step 2,Main Step 3,sub step 1.1,sub step 1.2 ....]。就像获得不同的格式一样,但无法获得我提到的实际产量,有人可以澄清我。

\t var dataProcess = { 
 
     \t \t \t \t parentProcess:[], 
 
     \t \t \t \t subProcess:[] 
 
     \t \t     }; \t \t      
 
    var steps = mainData.steps; // Steps Having the Full json data     
 
     \t \t var proc = []; 
 
       $scope.getSteps = function(steps) { 
 
        for (var i=0;i< steps.length;i++) { 
 
       \t  dataProcess.parentProcess.push(steps[i].name); 
 
       \t  for(var j=i;j<steps[i].steps.length;j++){ 
 
       \t \t dataProcess.subProcess.push(steps[i].steps[j].name); 
 
       \t } 
 
        }

这是我试过的方法之一,

+1

'mainSteps.map(x => [x.name,... x.steps.map(y => y.name)])'? (未测试) – gcampbell

+0

@gcampbell,下划线js对不对? Nope dude ...让我检查一下...并更新你。 –

+0

它真的有用:) –

回答

1

可能是你可以做这样的;

var mainSteps = [ 
 
    { 
 
    "id": "9b3b64b4-d8a5-46d5-b464-066dc5c45dc3", 
 
    "name": "Main Step 1", 
 
    "steps": [ 
 
     { 
 
     "name": "sub step 1.1" 
 
     }, 
 
     { 
 
     "name": "sub step 1.2" 
 
     } 
 
    ] 
 
    }, 
 
    { 
 
    "name": "Main step 2", 
 
    "steps": [ 
 
     { 
 
     "name": "sub step 2.1" 
 
     }, 
 
     { 
 
     "name": "sub step 2.2" 
 
     } 
 
    ], 
 
    }, 
 
    { 
 
    "name": "Main Step 3", 
 
    "steps": [ 
 
     { 
 
     "name": "sub step 3.1" 
 
     }, 
 
     { 
 
     "name": "sub step 3.2" 
 
     } 
 
    ], 
 
    } 
 
], 
 
mapped = mainSteps.map(e => [e.name, e.steps[0].name, e.steps[1].name]); 
 
console.log(mapped);

2

如果您需要ES5语法:

var details = mainSteps.map(function(step) { 
    return [ step.name ].concat((step.steps || []).map(function(substep){ 
    return substep.name; 
    }) 
}); 

ES6语法:

var details = mainSteps.map(step =< [step.name].concat((step.steps || []).map(sub => sub.name)); 

如果你需要比一层深更递归,您可以使用作为顶级映射器,它自己调用。

使用 Array.mapArray.concat功能
1

简单的解决方案:

// supposing "obj" is your initial object 
var dataProcess = obj.mainSteps.map(function (o) { 
    return [o.name].concat(o.steps.map(function(v){ return v.name; })); 
}); 

console.log(JSON.stringify(dataProcess, 0, 4)); 

输出:

[ 
    [ 
     "Main Step 1", 
     "sub step 1.1", 
     "sub step 1.2" 
    ], 
    [ 
     "Main step 2", 
     "sub step 2.1", 
     "sub step 2.2" 
    ], 
    [ 
     "Main Step 3", 
     "sub step 3.1", 
     "sub step 3.2" 
    ] 
] 

DEMO link

+0

那个“obj”是什么意思?我没有明白你的观点! –

+1

@Becky,看DEMO链接 – RomanPerekhrest

+0

明白了,谢谢Buddy :) –

1

这种方式,它的工作与阵列的不同长度和子阵列:

var results = mainSteps.map(x => [x.name].concat(x.steps.map(y => y.name))); 
相关问题