2017-02-19 16 views
2

Мой главный объект выглядит следующим образом:Как назначить во вложенном объекте Object.assign()?

const obj = { 

    data: { 
     'Puppies' : [], 
     'Kittens': [] 
    } 
}; 

Я хочу, чтобы присвоить значение поля данных в data.Puppies [0].

Когда я пытаюсь сделать это с помощью Object.assign() Я получаю сообщение об ошибке:

Unexpected token, expected , (83:12) 

    81 | 
    82 |  return Object.assign({}, obj, { 
> 83 |   data.Puppies[0]: list 
    |   ^
    84 |  }); 
    85 | } 
    86 | 

Я не знаю, как я могу выполнить свою задачу. Мне нужно использовать Object.assign(), потому что мне нужно вернуть новый объект, а не оригинальный. Я делаю это из-за редуктора Redux в ReactJS.

+0

так что в основном ку нужно получить копию из obj с новым элементом в 'Puppies' с нулевым индексом без изменения исходного объекта, не так ли? –

ответ

0

ES6 путь без мутаций:

const obj = { 
 
    data: { 
 
     'Puppies' : [], 
 
     'Kittens': [] 
 
    } 
 
}; 
 

 
const data = Object.assign({}, obj.data, { 
 
       Puppies: [...obj.data.Puppies, 'newValue'] 
 
      });  
 
const newObject = Object.assign({}, obj, {data}); 
 
console.log(newObject);

0

Можно назначить внешний объект и присвоить массив новое содержимое индекса 0 без мутирует оригинальный obj.

const list = ['foo', 'bar']; 
 
const obj = { data: { Puppies: [], Kittens: [] } }; 
 

 
console.log(Object.assign({}, obj, { data: { Puppies: Object.assign([], obj.data.Puppies, { 0: list }) } })); 
 
console.log(obj);

То же самое с содержанием для Puppies.

const list = ['foo', 'bar']; 
 
const obj = { data: { Puppies: ['bar', 42], Kittens: [] } }; 
 

 
console.log(Object.assign({}, obj, { data: { Puppies: Object.assign([], obj.data.Puppies, { 0: list }) } })); 
 
console.log(obj);

+0

Что делать, если щенки и котята могут измениться? Как насчет переменного котенка? – user1261710

+0

, то вы можете использовать шаблон для 'Kitten', а также' {data: {Kitten: Object.assign ([], obj.data.Kitten, {0: data})}} ' –

+0

NO Я имею в виду, закодированные Щенки и Котята. Что, если мы не знаем, кто это? – user1261710

0

Заменить Щенок с новым массивом с list как элементом 0 и остальные щенки, начиная с элементом 1, поэтому эффективно заменить элемент 0.

var obj = { data: { 'Puppies': [], 'Kittens': [] } }; 
var list = [ 'a', 'b' ]; 

var n = Object.assign({}, obj, { 
    data: Object.assign({}, obj.data, { 
    Puppies: [ list ].concat(obj.data.Puppies.slice(1)) 
    }) 
}); 

console.log(obj); 
console.log(n); 
0

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

const obj = { 
    data: { 
     'Puppies' : [], 
     'Kittens': [] 
    } 
}; 

const list = [1,2,3,4]; 
const xlens = R.lensPath(['data', 'Puppies']) 
console.log(R.set(xlens, list, obj)) 

Here является кодом repel

+0

, вы одержимы рампой. –

+0

ничего плохого, но только редактирование ответов других и введение этой плохой библиотеки –