2017-02-05 6 views
3

Я следую за учебником, но я потерян. Я не понимаю стартовой линии 9.Обновление массива объекта без мутации

enter image description here

так что я пытался сделать немного miarature

const updateTodo = (list, updated) => { 
    const index = list.findIndex(item => item.id === updated.id) 
    return [ 
    ...list.slice(0,index), 
    updated, 
    ...list.slice(index+1) 
    ] 
} 

https://jsbin.com/sifihocija/2/edit?js,console, но не дали результата, что автор сделал, что не так?

ответ

2

Проблемы в этой строке:

const index = list.findIndex(item => item.id === updated.id)

обновлена ​​является array, чтобы получить доступ к идентификатору, необходимо указать index также, для другого array вы используете loop, так item будет ЕАП object из array и item.id даст вам id каждого object, попробуйте следующее:

const index = list.findIndex(item => item.id === updated[0].id)

const arr = [ 
 
    {id:1,name:'hello'}, 
 
    {id:2,name:'hai'} 
 
] 
 

 
const arr2 = [ 
 
    {id:2,name:'this should be a new string'} 
 
] 
 

 
const updateTodo = (list, updated) => { 
 
    const index = list.findIndex(item => item.id === updated[0].id); 
 
    return [ 
 
    ...list.slice(0,index), 
 
    updated, 
 
    ...list.slice(index+1) 
 
    ] 
 
} 
 

 
console.log(JSON.stringify(updateTodo(arr,arr2)))

Проверьте рабочий код: https://jsbin.com/pazakujava/edit?js,console

Позвольте мне знать, если вам нужна помощь в этом.

+0

может у объяснить, почему у автора не должен делать это? Я имею в виду, что обновленный [0] .id –

+0

учебник находится здесь https://egghead.io/lessons/react-update-data-in-a-list-without-mutations –

+0

, потому что в его случае arr2 будет объектом , как это: 'const arr2 = {id: 2, name: 'это должна быть новая строка'}' вы можете попробовать этот arr2, код ur также будет работать :) –

0

Изменение

...list.slice(index+1) 

в

...list.slice(index,0) 
Смежные вопросы