У меня есть ответ JSON как это:Concatenate JSON массивы в JSON объектов в JavaScript
{"result":[["abc","de"],["fgh"],["ij","kl"]]}
Я хочу ответ, чтобы быть в форме:
{"result":["abc","de","fgh","ij","kl"]}
Как я могу добиться этого?
У меня есть ответ JSON как это:Concatenate JSON массивы в JSON объектов в JavaScript
{"result":[["abc","de"],["fgh"],["ij","kl"]]}
Я хочу ответ, чтобы быть в форме:
{"result":["abc","de","fgh","ij","kl"]}
Как я могу добиться этого?
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 link
http://jsfiddle.net/fu26849m/
Из 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]
var arrayToFlatten = [[0, 1], [2, 3], [4, 5]];
Native (от 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
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"]}
См. Его в действии ion:
http://jsfiddle.net/cazomufn/
Мое первое предложение для этого - вы должны создать 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));
Мне нравятся lodash' flatten (если вы можете жить с другой зависимостью.)
json.result = _.flatten(json.result);
// { result:['abc','de','fgh','ij','kl'] }
Например reduce
не поддерживается до IE9, но lodash все равно будет работать (сборка совместимости).
зависит от того, на каком языке вы создаете ответ в –
Вы имеете в виду, что хотите преобразовать ответ в javascript? – javiyu
Худший ответ u может получить: P 'x.split (" ["). Join (" "). Split ("] "). Join (" "). Replace (": ",": ["). ("}", "]}"); ' – Sunand