2015-11-25 2 views
1

В нашем проекте мы получаем данные из БД в следующем формате.Отображение Javascript

[ 
    [ 
     "ClearDB", 
     "[email protected]", 
     "com.test.cleardb" 
    ], 
    [ 
     "Cricbuzz", 
     "[email protected]", 
     "com.test.cricbuzz" 
    ], 
    [ 
     "Hangout", 
     "[email protected]", 
     "com.test.hangout" 
    ] 
] 

Я хочу это в ключевом формате значения, как указано ниже

[ 
    { 
     "projname": "ClearDB", 
     "projmanager": "[email protected]", 
     "package": "com.test.cleardb" 
    }, 
    { 
     "projname": "Cricbuzz", 
     "projmanager": "[email protected]", 
     "package": "com.test.cricbuzz" 
    }, 
    { 
     "projname": "Hangout", 
     "projmanager": "[email protected]", 
     "package": "com.test.hangout" 
    } 
] 

Пожалуйста, предоставьте мне правильный путь для реализации этого.

+5

быть пожалуйста советник SO is * not * a «Получите мою работу бесплатно», возможно, в следующий раз вы должны хотя бы показать нам, что вы пробовали до сих пор, вместо того, чтобы сказать «у меня есть X, я хочу Y, пожалуйста, сделайте это для меня." – nonchip

+0

отводится для исследовательских усилий, и ничего не предоставляется от ОП о том, что он пытался. (5 upvotes .. как пользователи, как OP, понимают, что это не очень хороший вопрос с таким количеством upvote) – Hacketo

+0

Downvoted по той же причине. По крайней мере, попытайтесь решить проблему. – dubonzi

ответ

6

Вы можете просто создать новый объект для каждого из массивов, а также создать массив объектов с map функции, как этот

var keys = ["projname", "projmanager", "package"]; 

console.log(data.map(function (arr) { 
    var obj = {}; 
    keys.forEach(function (key, idx) { obj[key] = arr[idx]; }); 
    return obj; 
})); 

Выход

[ { projname: 'ClearDB', 
    projmanager: '[email protected]', 
    package: 'com.test.cleardb' }, 
    { projname: 'Cricbuzz', 
    projmanager: '[email protected]', 
    package: 'com.test.cricbuzz' }, 
    { projname: 'Hangout', 
    projmanager: '[email protected]', 
    package: 'com.test.hangout' } ] 
1

если

var array =[ 
[ 
    "ClearDB", 
    "[email protected]", 
    "com.test.cleardb" 
], 
[ 
    "Cricbuzz", 
    "[email protected]", 
    "com.test.cricbuzz" 
], 
[ 
    "Hangout", 
    "[email protected]", 
    "com.test.hangout" 
] 
]; 

затем

var obj = []; 
array.each(function(item){ obj.push({"projname": item[0], 
             "projmanager":item[1], 
             "package": item[2]}) 
}); 

Edit:

Использование Jquery

var obj = []; 
$.each(array,function(key,value){ obj.push({"projname": value[0], 
             "projmanager":value[1], 
             "package": value[2]}) 
}); 

Использование JavaScript

var obj = []; 
array.forEach(function(item){ obj.push({"projname": item[0], 
             "projmanager":item[1], 
             "package": item[2]}) 
}); 
+3

'Array.prototype.each' не существует, это' forEach' –

+0

Извините, я думал, что вы используете jquery, если не да, используйте forEach.Спасибо @Arnaud Gueras –

+2

Даже если разработчик использует jQuery, метод '.each()' не доступен для объекта Array. Он доступен только в коллекции jQuery через '$ .each (myArray, ...)' –

1

Предположим данные, которые вы получаете из базы данных, хранятся в переменной «abc»

var abc = []; 
var output = []; 
for(var i = 0; i< abc.length; i++){ 
    output[i] = {}; 
    output[i].projname = abc[i][0]; 
    output[i].projmanager = abc[i][1]; 
    output[i].package = abc[i][2]; 
} 

Примечание: «abc» - это переменная, в которой вы храните данные из БД.

+1

Конечно, это работает, но зачем вам использовать четыре строки для инициализации и заполнения объекта одним свойством за раз, вместо того, чтобы просто сказать 'output [i ] = {projname: abc [i] [0], ... 'и т. д.? –

+0

Его проще для других понять. не все умело –

+0

Написание простого литерала предмета не попадает в категорию «умелых», оно попадает в категорию «чрезвычайно базовых». –

4

с Array.prototype.map:

var results = db.map(function (v) { 
    return { 
    projname: v[0], 
    projmanager: v[1], 
    package: v[2] 
    }; 
}); 
1

В ES6:

input . map(([projname, projmanager, package]) => ({projname, projmanager, package})); 

Часть в [] деконструирует параметр для map, который является одним из подмассивов, назначают первый элемент projname, и так на. Часть в {} создает и возвращает объект с ключом 'projname', значение которого projname и т.д.

Если вы хотите, чтобы обобщить это использовать любой массив имен полей (['projname', 'projmanager', 'package']):

input . map(
    values => 
    values . reduce(
     (result, value, i) => { 
     result[fieldnames[i]] = value; 
     return result; 
     }, 
     {} 
    ) 
); 
Смежные вопросы