Необходимо добавить объект в массив, который находится в состоянии - PullRequest
3 голосов
/ 29 марта 2019

Мне нужно добавить объект к последнему объекту массива

У меня есть массив, который содержит объекты в состоянии класса

state={
items:[{key:"333",val:"Hi"},{key:"555", val:"Iam"}]
}

Мне нужно добавить фильтробъект на последнем объекте объекта

items:[{key:"333",val:"Hi"},{key:"555", val:"Iam",filter:{refine:true}}]

Я попробовал следующий

    (this.state.items.length-1).concat({filters:{
        refine:true
    }}

Ответы [ 3 ]

2 голосов
/ 29 марта 2019

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

let state={
    items:[{key:"333",val:"Hi"},{key:"555", val:"Iam"}]
}
let last = state.items[state.items.length - 1];
last = {...last, filter:{refine:true}};

const newState = {
  ...state,
  items: [
      ...state.items.slice(0, -1),
      last
  ]
}

console.log(newState);
0 голосов
/ 29 марта 2019

С некоторыми маленькими помощниками ....

 const lens = (key, fn) => obj => ({ ...obj, [key]: fn(obj[key]) });
 const mapIndex = (index, fn) => arr => arr.map((it, i) => i === (index + arr.length) % arr.length ? fn(it) : it);

это так же просто, как:

 this.setState(lens("items", mapIndex(-1, it => ({ ...it, filter: { refine: true }}))));
0 голосов
/ 29 марта 2019

Вы можете взять последний элемент и затем объединить obj с ним, а затем снова добавить его в конец массива

let state={items:[{key:"333",val:"Hi"},{key:"555", val:"Iam"}]}

let obj = {filter:{refine:true}}

let add = (initial,obj) => {
  let last = initial[initial.length-1]
  let arr = [...initial].slice(0,-2)
  return [...initial, {...last, ...obj}]
}
state.items = add(state.items,obj)

console.log(state)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...