如何迭代多个对象并删除特定属性

3
我想先说明一下,我对编程非常新手(如果这是一个非常简单的查询 - 但它让我困惑!)
我正在尝试首次遍历对象并删除指定的键值对。
我有一个包含用户对象数组的函数,并且在该数组中,我想从每个对象中删除人名。
我尝试使用.length属性遍历对象,但是得到结果“Reference Error:name未定义。”
当我尝试以下操作时,它可以工作(但这不理想,因为我希望代码能够运行而无需指定单个索引号):
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未定义 我希望结果从对象中删除name: ''的值。


问题中只有一个代码块可见,但是您的意思是当有两个用户并且您想将其转换为循环时,delete users[0].name; delete users[1].name; 是否符合您的要求? - Ry-
错误意味着您没有定义name变量。如果您想删除名称为Kate的数组中的用户,则需要类似于var name ='Kate';的内容。目前,您的if()检查不知道您要删除的名称是什么。如果您同时显示用户数组,将会更有帮助。 - Shilly
当你使用splice时,它会从数组中删除完整对象而不仅仅是属性,并且也会减小数组的大小。因此,每次你splice数组时都必须添加i--;。 - AZ_
或者,在循环之前将长度存储在变量中,而不是每次评估.length - Shilly
4个回答

4
您可以遍历数组并删除不需要的属性。这会改变给定数据的值。
for (var i = 0; i < users.length; i++) {
    delete users[i].name;
}

高级版本使用解构与未想要的属性和剩余语法来获取所有其他属性并返回该对象。

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

1
那个东西 users = users.map(({ name, ...object }) => object); 真的很棒。 - Yevhen Horbunkov

0
一个简单的方法是使用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.log("after deleting property", users);

0

删除键值对...

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;
}

-1
问题中只有一个代码块可见,但是您的意思是当有两个用户时,delete users[0].name; delete users[1].name; 可以实现您想要的效果,并且您想将其转换为循环吗?如果是这样,
for (let user of users) {
    delete user.name;
}

该循环遍历数组中的每个用户并删除每个用户的name属性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接