Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.10.2015, 22:30
Кандидат Javascript-наук
Отправить личное сообщение для фонарик Посмотреть профиль Найти все сообщения от фонарик
 
Регистрация: 23.02.2013
Сообщений: 127

Добавить объект в другой объект
Помогите пожалуйста решить задачу. Есть объект
var materials = {
"Красный кирпич": {"Глина" : 10, "Цемент" : 5, "Вода" : 8},
"Белый кирпич": {"Песок" : 5, "Цемент" : 4,"Вода" : 3}
}
Есть текст:
var string = '[Силикат] состоит из следующих элементов: (Шлак), (Цемент), (Добавки). Практичный стройматериал.'
Регулярным выражением получаем из текста название материала и его составляющие:
var material_name = string.split('[')[1].split(']')[0]; // Силикат
var material_components = string.match(/\([^\)]*\)/g)//(Шлак), (Цемент), (Добавки)
Как объект materials привести к виду типа:
materials = {
"Красный кирпич": {"Глина" : 10, "Цемент" : 5, "Вода" : 8},
"Белый кирпич": {"Песок" : 5, "Цемент" : 4,"Вода" : 3},
"Силикат": {"Шлак", "Цемент", "Добавки"}
}
Можно ли добавить "Силикат" в виде массива? Или только как объект? Просто у компонентов "Шлак", "Цемент", "Добавки" нет значений.
Ответить с цитированием
  #2 (permalink)  
Старый 10.10.2015, 22:48
Профессор
Отправить личное сообщение для caetus Посмотреть профиль Найти все сообщения от caetus
 
Регистрация: 23.09.2014
Сообщений: 194

var string = '[Силикат] состоит из следующих элементов: (Шлак), (Цемент), (Добавки). Практичный стройматериал.'
var material_name = string.split('[')[1].split(']')[0]; // Силикат
var material_components = string.match(/\([^\)]*\)/g)//(Шлак), (Цемент), (Добавки)

var materials = {
"Красный кирпич": {"Глина" : 10, "Цемент" : 5, "Вода" : 8},
"Белый кирпич": {"Песок" : 5, "Цемент" : 4,"Вода" : 3}
}



function f (obj,a,b) {
obj[a] = {}
for(var i = 0; i < b.length; i++) obj[a][b[i]] = null;
}


f(materials,material_name, material_components)


alert(JSON.stringify(materials))

Последний раз редактировалось caetus, 10.10.2015 в 23:20.
Ответить с цитированием
  #3 (permalink)  
Старый 10.10.2015, 23:07
Кандидат Javascript-наук
Отправить личное сообщение для фонарик Посмотреть профиль Найти все сообщения от фонарик
 
Регистрация: 23.02.2013
Сообщений: 127

Сообщение от caetus Посмотреть сообщение
var string = '[Силикат] состоит из следующих элементов: (Шлак), (Цемент), (Добавки). Практичный стройматериал.'
var material_name = string.split('[')[1].split(']')[0]; // Силикат
var material_components = string.match(/\([^\)]*\)/g)//(Шлак), (Цемент), (Добавки)

var materials = {
"Красный кирпич": {"Глина" : 10, "Цемент" : 5, "Вода" : 8},
"Белый кирпич": {"Песок" : 5, "Цемент" : 4,"Вода" : 3}
}



function f (obj,a,b) {
obj[a] = {}
for(var i = 0; i < b.length; i++) obj[a][b[i]] = undefined;
}


f(materials,material_name, material_components)


console.log(materials)
alert(JSON.stringify(materials))
Что-то с объектом Силикат не так
Ответить с цитированием
  #4 (permalink)  
Старый 10.10.2015, 23:22
Профессор
Отправить личное сообщение для caetus Посмотреть профиль Найти все сообщения от caetus
 
Регистрация: 23.09.2014
Сообщений: 194

изменил undefined на null и все заработало
Ответить с цитированием
  #5 (permalink)  
Старый 10.10.2015, 23:33
Кандидат Javascript-наук
Отправить личное сообщение для фонарик Посмотреть профиль Найти все сообщения от фонарик
 
Регистрация: 23.02.2013
Сообщений: 127

caetus,
спасибо вам большое
Ответить с цитированием
  #6 (permalink)  
Старый 11.10.2015, 01:57
Аватар для Poznakomlus
Профессор
Отправить личное сообщение для Poznakomlus Посмотреть профиль Найти все сообщения от Poznakomlus
 
Регистрация: 13.03.2013
Сообщений: 1,266

var materials = {
    "Красный кирпич": {"Глина" : 10, "Цемент" : 5, "Вода" : 8},
    "Белый кирпич": {"Песок" : 5, "Цемент" : 4,"Вода" : 3}
};
var str = '[Силикат] состоит из следующих элементов: (Шлак), (Цемент), (Добавки). Практичный стройматериал.';
var key = str.split(']', 1)[0].split('[', 2)[1];
materials[key] = {};
str.match(/\(.*?\)/g).forEach(function(el){
    materials[key][el.replace(/(^.|.$)/g, '')] = null;
});
console.dir(materials);
alert(JSON.stringify(materials));

вариант
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как проверить класс в одном блоке и добавить в другой webdesing25 jQuery 1 18.07.2014 01:37
Добавить класс в другой класс jQuery skillful jQuery 9 09.02.2014 15:40
Объект залезает на другой vladly Общие вопросы Javascript 2 10.12.2012 20:44
как добавить свойство объекта в объект в объекте ? %) mitiya Общие вопросы Javascript 1 07.10.2012 13:46
добавить массив в объект zloctb Общие вопросы Javascript 3 14.01.2012 12:16