2015-12-15 3 views
1

По какой-то причине у меня довольно много проблем при попытке преобразования объектов и массивов.преобразование объекта с помощью underscore.js

Текущие данные у меня хранится в коллекции MongoDB и выглядит следующим образом:

[{ "_id" : 1, "name" : "someName", "colorName" : "Pink"}, 
{ "_id" : 2, "name" : "someName2", "colorName" : "RoyalBlue"}, 
{ "_id" : 3, "name" : "aThirdOne", "colorName" : "Gold"}, 
{ "_id" : 4, "name" : "oneMore", "colorName" : "LightGreen"}] 

мне нужно получить либо следующие два массива, но хотел бы знать, как получить оба.

[{ "value" : 1, "label" : "someName"}, 
{ "value" : 2, "label" : "someName2"}, 
{ "value" : 3, "label" : "aThirdOne"}, 
{ "value" : 4, "label" : "oneMore"] 

[{1 : "someName"}, 
{2 : "someName2"}, 
{3 : "aThirdOne"}, 
{4 : "oneMore"}] 

Я знаю, что это, вероятно, что-то с _.map, но я не знаю, почему я не могу понять это. Пожалуйста, порекомендуйте.

+0

Можете ли вы показать нам, как вы пытаетесь сделать это с помощью '_.map' сейчас? –

ответ

2

Вам не нужно подчеркивания для этого, это просто нормальное Array.prototype.map использование метода (хотя Подчеркивание также этот метод):

var data = [{ "_id" : 1, "name" : "someName", "colorName" : "Pink"}, 
 
    { "_id" : 2, "name" : "someName2", "colorName" : "RoyalBlue"}, 
 
    { "_id" : 3, "name" : "aThirdOne", "colorName" : "Gold"}, 
 
    { "_id" : 4, "name" : "oneMore", "colorName" : "LightGreen"}]; 
 
    
 
var result = data.map(function(el, i) { 
 
    return {value: el._id, label: el.name}; 
 
}); 
 

 
document.body.innerHTML = '<pre>' + JSON.stringify(result, null, 4) + '</pre>';

Также обратите внимание, что ваша вторая структура данных не имеет смысла, потому что это нерегулярно, поэтому не используйте его, это совсем не очень удобно.

А вот соответствующая Underscore версия:

// Or Underscore version 
var result = _.map(data, function(el) { 
    return {value: el._id, label: el.name}; 
}); 
+0

Спасибо! Как я могу сделать это без кавычек вокруг 'value' и' label?? Я понимаю, что я просил цитаты в моем вопросе, но любопытно, как это сделать без – pingo

+0

Вы имеете в виду «_id»? Эти кавычки не требуются, вам нужны только они, если ключ недействителен идентификатор (например, имеет пробел или специальный символ в имени). – dfsq

1

Попросту Javascript вы можете использовать Array.prototype.forEach() для итерации througt массива и монтаж объектов и толкать его в розыск результатов.

Метод forEach() выполняет предоставленную функцию один раз для элемента массива.

var array = [{ "_id": 1, "name": "someName", "colorName": "Pink" }, { "_id": 2, "name": "someName2", "colorName": "RoyalBlue" }, { "_id": 3, "name": "aThirdOne", "colorName": "Gold" }, { "_id": 4, "name": "oneMore", "colorName": "LightGreen" }], 
 
    result1 = [], 
 
    result2 = []; 
 

 
array.forEach(function (a) { 
 
    result1.push({ value: a._id, label: a.name }); 
 
    var o = {}; 
 
    o[a._id] = a.name 
 
    result2.push(o); 
 
}); 
 

 
document.write('<pre>' + JSON.stringify(result1, 0, 4) + '</pre>'); 
 
document.write('<pre>' + JSON.stringify(result2, 0, 4) + '</pre>');

1

использование:

var newObject = _.map(yourObject, function(val) { 
return { 
    "value": val._id, 
    "label": val.name 
}}); 

И та же концепция для другого результата, вы заинтересованы в.

Смежные вопросы