#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);
Удачи!