在javascript中连接JSON对象中的JSON数组

Concatenate JSON arrays in a JSON objects in javascript

本文关键字:JSON 数组 对象 连接 javascript      更新时间:2023-09-26

我有一个JSON响应,如下所示:

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

我希望回复的形式是:

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

我怎样才能做到这一点?

来自mozilla文档

var flattened = [[0, 1], [2, 3], [4, 5]].reduce(function(a, b) {
  return a.concat(b);
});
// flattened is [0, 1, 2, 3, 4, 5]
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/

jsFiddle

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

Native(来自JavaScript中的合并/展平数组?):

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

jQuery(来自如何在jQuery中展平数组?):

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

原生替代方案(来自JavaScript中的合并/展平数组?):

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

我的第一个建议是,应该根据需要直接创建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));

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/

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

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

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