2016-08-15 2 views
1

Как создать список объектов, разделенных запятыми, в другом объекте в Javascript? По крайней мере, это то, что я думаю, что я пытаюсь сделать.Как динамически создавать список объектов Javascript в объектах, разделенных запятыми

Конечный результат я ищу это:

var endresult = { 'MD': { fill: 'yellow' }, 'VA': { fill: 'blue' }, 'IL': { fill: 'red' }, 'SC': { fill: 'green' } }; 

Я попытался с помощью массивов, создание классов, Array.join(), создавая несколько строк и конкатенации. Я также попытался создать пары значений ключевых объектов, но я не могу их успешно создать.

Основная цель состоит в том, чтобы взять список переменных состояния и цвета, передать их в класс ключей: пары значений объекта, а затем добавить этот новый экземпляр объекта в список, который затем будет передан в переменную endresult с помощью тот же синтаксис, что и код примера.

Спасибо заранее (у меня такое чувство, что я собираюсь учиться).

+2

Пожалуйста, разместите пример данных, которые вы хотите преобразовать –

+0

Как это имеет отношение к jQuery? Пожалуйста, отредактируйте вопрос, предоставьте всю необходимую информацию и убедитесь, что мы находимся на одной странице, чтобы вы получили соответствующий ответ. –

+0

@RobertRocha Я думал, что jQuery можно использовать для решения проблемы. – BinaryBoss

ответ

3

Даны два массива, один с состояниями, другой с названиями цветов, вы можете использовать эту функцию, чтобы получить конечный результат:

function combine(states, colors) { 
 
    return colors.reduce((result, color, i) => 
 
     Object.assign(result, { [states[i]]: { fill: color } }), {}); 
 
    
 
} 
 

 
// sample data 
 
var states = ['MD', 'VA', 'IL', 'SC']; 
 
var colors = ['yellow', 'blue', 'red', 'green']; 
 

 
// convert 
 
var result = combine(states, colors); 
 

 
// output 
 
console.log(result);

+0

Это отвечает мне в правильном направлении. Благодаря! var StateStyles = {}; $ .each (данные, функция (i, item) { StateStyles [item.state] = {fill: item.color}; ); – BinaryBoss

+0

Добро пожаловать. Если бы я знал структуру 'data', я бы настроил решение на это. Но приятно видеть, что вы его получили ;-) – trincot

+0

И я думаю, что у меня возникла проблема с описанием проблемы. Я не знал, что структура объекта может иметь ключи. – BinaryBoss

0
var colors = {LA: {fill: 'blue'}}; 
colors['MA'] = {fill: 'red'}; 
//colors is now === {LA: {fill: 'blue'}, MA: {fill: 'red'}}; 

Имейте в виду, когда вы используйте нотацию Object [key], в конечном итоге ключ должен быть строкой для ее работы, как вы планируете.

Хотя, если «fill» - единственное значение, которое вы намерены сохранить, вы можете упростить свой объект, просто исключив объект {fill: 'color'} и сделайте {LA: 'blue', ...}.

См:

Mozilla Property accessors docs

0
var StateStyles = {}; 

$.each(data, function (i, item) { 
    StateStyles[item.state] = { fill: item.color }; 
); 

Я ценю помощь everyone.I узнал от trincot и Эндрю Бабин, что пропал без вести; Мне пришлось назначить ключ, используя скобки. Теперь у меня есть объект с несколькими объектами внутри него. Не знал, что это можно сделать.

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