【问题标题】:Concatenate JSON arrays in a JSON objects in javascript在 javascript 中的 JSON 对象中连接 JSON 数组
【发布时间】:2014-10-31 02:47:42
【问题描述】:

我有一个这样的 JSON 响应:

{"result":[["abc","de"],["fgh"],["ij","kl"]]}

我希望响应格式为:

{"result":["abc","de","fgh","ij","kl"]}

我怎样才能做到这一点?

【问题讨论】:

  • 取决于您创建响应的语言
  • 您的意思是要在 javascript 中转换响应吗?
  • 你能得到的最糟糕的回应:P x.split("[").join("").split("]").join("").replace(":",":[").replace("}","]}");

标签: javascript arrays


【解决方案1】:

来自mozilla docs

var flattened = [[0, 1], [2, 3], [4, 5]].reduce(function(a, b) {
  return a.concat(b);
});
// flattened is [0, 1, 2, 3, 4, 5]

【讨论】:

    【解决方案2】:
    var test={"result":[["abc","de"],["fgh"],["ij","kl"]]};
    var tmp=[];
    for(var i in test.result){
        for(var j in test.result[i]){
          tmp.push(test.result[i][j]);
        }
    }
    test.result=tmp;
    alert(JSON.stringify(test));
    

    jsfiddle linkhttp://jsfiddle.net/fu26849m/

    【讨论】:

      【解决方案3】:

      jsFiddle

      var arrayToFlatten = [[0, 1], [2, 3], [4, 5]];
      

      原生(来自Merge/flatten an array of arrays in JavaScript?):

      var flattenedNative = arrayToFlatten.reduce(function(a, b) {
        return a.concat(b);
      });
      alert(flattenedNative); // 0,1,2,3,4,5
      

      jQuery(来自How to flatten array in jQuery?):

      var flattenedJQuery = $.map(arrayToFlatten, function(n) {
        return n;
      });
      alert(flattenedJQuery); // 0,1,2,3,4,5
      

      原生替代(来自Merge/flatten an array of arrays in JavaScript?):

      var flattenedNativeAlt = [].concat.apply([], arrayToFlatten);
      alert(flattenedNativeAlt); // 0,1,2,3,4,5
      

      【讨论】:

        【解决方案4】:

        我的第一个建议是你应该直接创建你想要使用的 json。 得到后请勿修改。

        你也可以用这个,这会给你想要的价值。:

            var mainText= JSON.parse('{"result":[["abc","de"],["fgh"],["ij","kl"]]}');
            var arr = [];
            for(var val1 in mainText.result)
            {   
                arr = arr.concat(mainText.result[val1]);
            }   
            mainText.result = arr;
            console.log(JSON.stringify(mainText));
        

        【讨论】:

          【解决方案5】:

          reduce()concat() 函数可以组合来展平数组:

          var json = {"result":[["abc","de"],["fgh"],["ij","kl"]]};
          
          function concatArrays(a, b) { return a.concat(b); }
          json.result = json.result.reduce(concatArrays);
          
          console.log(json);  //{"result":["abc","de","fgh","ij","kl"]}
          

          查看实际操作:
          http://jsfiddle.net/cazomufn/

          【讨论】:

            【解决方案6】:

            我喜欢lodash' flatten(如果你能忍受另一个依赖的话。)

            json.result = _.flatten(json.result);  
            
            // { result:['abc','de','fgh','ij','kl'] }
            

            例如,reduce 在 IE9 之前不受支持,但 lodash 仍然可以工作(兼容性构建)。

            【讨论】:

              猜你喜欢
              • 2019-05-23
              • 1970-01-01
              • 2014-12-02
              • 1970-01-01
              • 1970-01-01
              • 2019-08-11
              • 1970-01-01
              • 1970-01-01
              • 2016-05-31
              相关资源
              最近更新 更多