我有一个由ajax响应发送的json数组。
json数组采用以下方式
[{"id":"11105","name":"Gummy Drop (iPhone, Free, ROW except CN, 72.3MB, w"},{"id":"11107","name":"Gummy Drop (iPad, Free, ROW except CN, 72.3MB, w\/ "},{"id":"4274","name":"Z-Redirect Non-Targeted Traffic Dragon City Mobile"},{"id":"6484","name":"Z-Redirect Non-Targeted Traffic Dragon City Mobile"}]
现在,有时,密钥可以是id
和name
,有时可以是roll
和address
所以它并不总是可预测的或者是一些。
我需要获取此JSON数组/对象的密钥形式并构建类似这样的东西
var aColumns = [{ sTitle: "id"}, { sTitle: "name" }];
有人向我建议了一段代码,如下:
$.post("ajax.php",{'version':v,'category':ctg,'country':cnt,'func':'show_datatable'},
function(data)
{
/*var aColumns = [{ sTitle: "Week"}, { sTitle: "Winkelformule" }];*/
for(var i = 0; i < data.length; i++)
{
keycolumns = Object.keys(data[i]);
for(j = 0; j < keycolumns.length; j++)
{
alert(keycolumns[j]);
if($.inArray(keycolumns[j],aColumns.sTitle)<=0)
{
aColumns.push({sTitle: keycolumns[j]}) //Checks if
}
}
}
},'json');
看来他的想法是正确的,但在这些方面有些可疑:
if($.inArray(keycolumns[j],aColumns.sTitle)<=0)
{
aColumns.push({sTitle: keycolumns[j]}) //Checks if
}
答案 0 :(得分:1)
var aColumns = [];
data.forEach(function (el) {
Object.keys(el).forEach(function (key) {
if (!~aColumns.indexOf(key)) {
aColumns.push(key);
}
})
})
aColumns = aColumns.map(function (key) {
return {sTitle: key};
});
console.log(aColumns);
演示:http://jsfiddle.net/e50rwfbr/
- 这条线不正确
if($.inArray(keycolumns[j], aColumns.sTitle)<=0)
你需要检查aColumns而不是keycolumns ..像这样
var aColumns = [], i, j;
for(i = 0; i < data.length; i++) {
keycolumns = Object.keys(data[i]);
for (j = 0; j < keycolumns.length; j++) {
if (!aColumns.length || !aColumns.filter(function(el) { return el.sTitle == keycolumns[j]; }).length) {
aColumns.push({sTitle: keycolumns[j]});
}
}
}