Как перебрать несколько объектов и удалить определенное свойство

Я хотел бы предварить это, сказав, что я очень новичок в кодировании (извините, если это очень простой вопрос, но он поставил меня в тупик!)

Я пытаюсь перебрать объекты в первый раз и удалить указанную пару ключ-значение.

У меня есть функция с массивом объектов 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: ' ' из объекта.

В вопросе виден только один блок кода, но вы имеете в виду, что delete users[0].name; delete users[1].name; делает то, что вы хотите, когда есть два пользователя, и вы хотите преобразовать это в цикл?

Ry- 10.04.2019 11:37

Ошибка означает, что у вас не определена переменная name. Вам нужно что-то вроде var name = 'Kate';, если вы хотите удалить пользователя внутри массива с именем Кейт. На данный момент ваш чек if () не знает, какое имя вы пытаетесь удалить. Было бы полезно, если бы вы также показали массив пользователей.

Shilly 10.04.2019 11:38

когда вы используете splice, он удаляет из массива весь объект, а не только свойство, что также уменьшает размер массива. поэтому каждый раз, когда вы объединяете массив, вы должны добавлять i--;

AZ_ 10.04.2019 11:38

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

Shilly 10.04.2019 11:39
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
4
256
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Вы можете перебрать массив и удалить нежелательное свойство. Это мутирует данные.

for (var i = 0; i < users.length; i++) {
    delete users[i].name;
}

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

users = users.map(({ name, ...object }) => object);

Эта штука users = users.map(({ name, ...object }) => object); очень хороша

Yevgen Gorbunkov 10.04.2019 11:47

Простым подходом было бы перебрать элементы с помощью 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;
}

Другие вопросы по теме