【问题标题】:How to get two different array objects together如何将两个不同的数组对象放在一起
【发布时间】:2016-11-29 06:42:12
【问题描述】:

在这里我附上了我的 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"
      }
    ],
  }
]

我正在寻找类似的输出 --> [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步骤 3.2] 。我花了一整天的时间来做这个输出,但得到的输出如下 [[Main Step 1,Main Step 2,Main Step 3,sub step 1.1,sub step 1.2....] 就像得到不同的格式但我无法得到我提到的实际输出,有人可以澄清一下吗?

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

这是我尝试过的一种方式,

【问题讨论】:

  • mainSteps.map(x =&gt; [x.name, ...x.steps.map(y =&gt; y.name)])? (未测试)
  • @gcampbell ,下划线 js 对吗?不,伙计...让我检查一下...并更新您。
  • 它真的有效:)

标签: javascript arrays json for-loop


【解决方案1】:

如果你需要 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));

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

【讨论】:

    【解决方案2】:

    使用Array.mapArray.concat 函数的简单解决方案:

    // 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

    【讨论】:

    • @Becky,查看演示链接
    • 知道了,谢谢好友 :)
    【解决方案3】:

    这样,它可以处理各种长度的数组和子数组:

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

    【讨论】:

      【解决方案4】:

      也许你可以这样做;

      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);

      【讨论】:

        猜你喜欢
        • 2021-06-12
        • 2020-03-29
        • 2018-12-27
        • 1970-01-01
        • 2023-01-14
        • 2018-06-08
        • 2021-07-05
        • 1970-01-01
        • 2018-11-23
        相关资源
        最近更新 更多