Как создать копию данных о состоянии без некоторых свойств в React? - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть данные о состоянии, которые я хочу преобразовать в JSON, например

state = {
    name: “John”
    age: 24
    height: “180cm”
    id: 2
}

Как мне go создать копию этого состояния без свойства id?

Итак

copy = {
    name: “John”
    age: 24
    height: “180cm”
}

Я пытался использовать функцию фильтра, но она не работает на this.state?

Любая помощь будет отличной.

Ответы [ 7 ]

2 голосов
/ 13 апреля 2020
const { id, ...copy } = state;

Это деструктурирующее присвоение приводит к локальному объявлению id и объекту с именем copy, который содержит все оставшиеся ключи (и значения) state, которые не id.

См. следующий фрагмент для контекста.

const state = {
  name: 'John',
  age: 24,
  height: '180 cm',
  id: 2
};

const { id, ...copy } = state;

console.log(copy);
0 голосов
/ 13 апреля 2020

Если у вас есть вода sh в проекте

import omit from 'lodash/omit';

const newState = omit(oldState, ['id']);

Если у вас нет воды sh в проекте

const { id, ...newState } = oldState;
0 голосов
/ 13 апреля 2020
const obj = {
    name: "John",
    age: 24,
    height: "180cm",
    id: 2
}

const { id, ...rest} = obj;

rest теперь все свойства, но id

0 голосов
/ 13 апреля 2020

подход, который я бы выбрал, называется деструктуризацией, и он будет выглядеть примерно так:

{name,age,height}= this.state;

, а затем скопировать все элементы в новую переменную

const copystate= {name,age,height}
0 голосов
/ 13 апреля 2020

Сделайте следующее:

const state = {
    name: "John",
    age: 24,
    height: "180cm",
    id: 2
}
const newState = {...state}
delete newState.id

Это создаст объект newState вместо манипулирования исходным объектом state (что может вызвать проблемы). А затем он обновит объект newState, удалив id.

. Затем вы сможете двигаться дальше, работая с объектом newState.

0 голосов
/ 13 апреля 2020

Вы можете просто сделать это,

let state = {
  name: "John",
  age: 24,
  height: "180cm",
  id: 2
}
let copy = {}

Object.keys(state).forEach(k => {
  if(k !== 'id') {
    copy[k] = state[k]
  }
})

console.log(copy)
0 голосов
/ 13 апреля 2020

var state = {
  name: 'John',
  age: 24,
  height: '180 cm',
  id: 2
};

// you need to filter the keys of the object
var keysToKeep = Object.keys(state).filter(key => key != 'id');

var copy = keysToKeep.reduce((acc, key) => {
  acc[key] = state[key];
  return acc;
}, {});

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