Я хотел бы предварить это, сказав, что я очень новичок в кодировании (извините, если это очень простой вопрос, но он поставил меня в тупик!)
Я пытаюсь перебрать объекты в первый раз и удалить указанную пару ключ-значение.
У меня есть функция с массивом объектов User, и в этом массиве я хочу удалить имя человека из каждого объекта.
Я попытался перебрать объект, используя свойство .length, но получил результат Reference Error: name is not defined.
Когда я пытаюсь сделать следующее, это работает (но это не идеально, так как я хочу, чтобы код запускался без указания индивидуального номера индекса):
delete users[0].name;
delete users[1].name;
for (let i = 0; i < users.length; i++) {
if (users[i] === name) {
users.splice(i, 1);
}
return users;
}
Фактический результат: ReferenceError: name is not defined
Я хочу, чтобы в результате было удалено значение name: ' ' из объекта.
Ошибка означает, что у вас не определена переменная name
. Вам нужно что-то вроде var name = 'Kate';
, если вы хотите удалить пользователя внутри массива с именем Кейт. На данный момент ваш чек if ()
не знает, какое имя вы пытаетесь удалить. Было бы полезно, если бы вы также показали массив пользователей.
когда вы используете splice, он удаляет из массива весь объект, а не только свойство, что также уменьшает размер массива. поэтому каждый раз, когда вы объединяете массив, вы должны добавлять i--;
Или просто сохраните длину в переменной перед циклом вместо того, чтобы каждый раз вычислять .length
.
Вы можете перебрать массив и удалить нежелательное свойство. Это мутирует данные.
for (var i = 0; i < users.length; i++) {
delete users[i].name;
}
Расширенная версия принимает деструктурирование с нежелательным свойством и синтаксисом остатка для получения всех других свойств и возврата этого объекта.
users = users.map(({ name, ...object }) => object);
Эта штука users = users.map(({ name, ...object }) => object);
очень хороша
Простым подходом было бы перебрать элементы с помощью forEach
и удалить нужное свойство.
let users = [{name: "a", prop1: 1, prop2: 2},{name: "b", prop1: 2, prop2: 2}, {name: "c", prop1: 3, prop2: 2}];
users.forEach(user => {
delete user['name'];
});
console.info("after deleting property", users);
There’s only one code block visible in the question, but do you mean
delete users[0].name; delete users[1].name;
does what you want when there are two users and you’d like to convert that to a loop?
Если да,
for (let user of users) {
delete user.name;
}
Это перебирает каждого пользователя в массиве и удаляет свойство name
каждого из них.
Чтобы удалить пару ключ-значение...
var users = [
{name: "John", role: "Cleaner"},
{name: "Jim", role: "Sergent"},
{name: "Jackhn", role: "Baker"},
{name: "Josh", role: "tinker"},
{name: "Jenny", role: "Soldier"}
];
for (var i=0; i < users.length; i++) {
delete users[i].name;
}
В вопросе виден только один блок кода, но вы имеете в виду, что
delete users[0].name; delete users[1].name;
делает то, что вы хотите, когда есть два пользователя, и вы хотите преобразовать это в цикл?