2017-01-08 2 views
0

Я хочу добавить небольшой объект в большой объект. У меня есть один элемент позиции. Я хочу добавить маленький объект в эту позицию. Но если в этой позиции есть какой-то объект, поместите маленький объект на тот же уровень.добавить объект во вложенный объект

var object = { 'mcq': { 'options1': { 'image': { 'contact': {}}}, 'options2': {}, 'options3': {}}}; 

var position = "mcq.options1.image"; 
var add_element = {"number": {}}; 

// output should be like this : 
var object = { 'mcq': { 'options1': { 'image': { 'contact': {}, 'number': {}}}, 'options2': {}, 'options3': {}}}; 

ответ

0

ОБНОВЛЕНО ОТВЕТ НА ВОПРОС НА КОММЕНТАРИИ

// Recursive function to traverse the object and set key and value of the new object param passed 
 
function setValue(obj,path,add_element){ 
 
    if (typeof(path)=='string'){ 
 
     path = path.split('.'); 
 
    } 
 
    if (path.length > 1){ 
 
     setValue(obj[path.shift()], path, add_element); 
 
    }else{ 
 
     obj[path[0]][Object.keys(add_element)[0]] = add_element[Object.keys(add_element)[0]]; 
 
    } 
 
} 
 

 
var object = { 'mcq': { 'options1': { 'image': { 'contact': {}}}, 'options2': {}, 'options3': {}}}; 
 
var position = "mcq.options1.image"; 
 
var add_element = {"number": {}}; 
 

 
setValue(object, position, add_element); 
 

 
console.log(object);

Предыдущий ответ

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

object.mcq.options1.image.number = {}; 

var object = { 'mcq': { 'options1': { 'image': { 'contact': {}}}, 'options2': {}, 'options3': {}}}; 
 

 
console.log(object); 
 

 
object.mcq.options1.image.number = {}; 
 

 
console.log(object);

+0

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

+0

var object = {'mcq': {'options1': {'image': {'contact': {}}}, 'options2': {}, 'options3': {}}}; console.log (объект); var position = "mcq.options1.image"; объект [положение] = {}; console.log (объект); –

+0

смотрите выше комментарий, и в этом моя позиция динамична и хранится в переменной. –

0

Попробуйте, как это ...

<script> 
var object = { 'mcq': { 'options1': { 'image': { 'contact': {}}}, 'options2': {}, 'options3': {}}}; 

var position = "mcq.options1.image"; 
var add_element = {"number": {}}; 
console.log(object); 
//output should be like this: 
object.mcq.options1.image.new = add_element; 
console.log(object); 

</script> 

Fiddle ... http://www.w3schools.com/code/tryit.asp?filename=FBJ62BGIT3E9 вижу здесь

+0

OP нуждается в том, чтобы путь к траверсу был динамическим – codePG

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