Как удалить массив из объекта с помощью reactjs

#javascript #reactjs

#javascript #reactjs

Вопрос:

Моя цель — удалить массив[] из объекта. Я не смог понять, как удалить конкретный массив из объекта. Кто-нибудь может помочь мне с этим запросом?

Вот следующий объект:

 experience: [
    {
        organisation: "",
        id: "",
        from: "",
        to: "",
        skills: []
    }
]
  

Experience массив, имеющий объект, может содержать несколько объектов.

 experience: [
    {
        organisation: "",
        id: "",
        from: "",
        to: "",
        skills: []
    },
    {
        organisationName: "",
        id: "",
        from: "",
        to: "",
        skills: []
    }
]
  

Я хочу удалить skills массив из каждого объекта.

Я пробовал таким образом, но он показывает undefined.

  let skillsArray = this.state.experiences.forEach((item) => item.skills! == Array.isArray([]))

  

Может ли кто-нибудь, пожалуйста, помочь мне с этим запросом?

Ответ №1:

Для достижения того, что вы пытаетесь сделать, вам нужно использовать метод map. Этот метод проходит через каждый элемент массива и возвращает новый массив, где каждый элемент является тем, что возвращает ваша функция.

forEach будет проходить через все элементы в вашем массиве и выполнять то, что вы передаете в качестве функции для каждого элемента. В вашем коде вы просто выполняете сравнение, которое на самом деле ни на что не влияет.

Чтобы ответить на ваш вопрос:

 let skillsArray = this.state.experiences.map((item) => {
  delete item.skills;
  return item;
})
  

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

 let skillsArray = this.state.experiences.map((item) => {
  let newItem = { ...item }
  delete newItem.skills;
  return newItem;
})
  

Еще одна вещь, этот вопрос действительно касается Javascript. React на самом деле не участвует ни в чем из этого.

Комментарии:

1. ПРИВЕТ, на самом деле я хочу удалить элемент skills при отправке формы. Когда я использую приведенный выше ответ для отправки формы, он показывает ошибку, например, навыки не определены Cannot read property 'map' of undefined . Я думаю, что он удаляет везде

2. Я предполагаю, что вы используете первую версию моего ответа. Во втором я копирую объект, чтобы он не изменял оригинал.

3. Но мы нигде не назначаем newItem

4. Привет, как удалить несколько свойств из объекта? если я даю delete newItem.skills; delete newItem.to , то я получаю таким образом «Операнд оператора ‘delete’ должен быть необязательным».

Ответ №2:

Сопоставьте experience массив, разрушьте skills свойство и используйте синтаксис rest, чтобы собрать остальные свойства в объекте и вернуть его:

 const state = {
  experience: [{
    organisation: "",
    id: "",
    from: "",
    to: "",
    skills: []
  }]
};

const newState = {
  ...state,
  experience: state.experience.map(
    ({ skills, ...rest }) => rest
  )
};
console.log(newState);  

Комментарии:

1. Привет, он предоставляет все доступные переменные в состоянии. но не удаление навыков из массива опыта

2. Это действительно удаление skills свойства из каждого объекта в массиве — запустите фрагмент, чтобы убедиться в этом сами. Вы уверены, что скопировали код правильно?

3. Да, я скопировал код, я использую class component. В методе отправки, когда я использую вышеупомянутый, он отображает каждую переменную состояния в консоли

4. Потому что это то, что код делает в основном в последней строке. Этот ответ newState является вашим skillsArray и state является вашим this.state

5. @tehsis — Я сделал это, но все равно получаю тот же результат

Ответ №3:

Вы можете отфильтровать свой список по нужной проблеме, и он будет автоматически удален, например, если вы хотите удалить все элементы = 3 :

 list: prevState.list.filter(x=> x != 3);
  

Удачи!