在javascript对象中删除属性或键的不同方法

21,641 阅读3分钟

在本教程中,我们将学习在javascript对象中删除属性或键的不同方法。

如何从Javascript对象中删除一个属性?

JavaScript对象是一个用小括号{}括起来的属性的键和值的集合。

让我们在javascript中声明一个对象,并对键和值进行内联初始化。

let obj = {
    "model": "alto",
    "company": "Maruthi",
    "type": "car"
}

在这篇博文中:

我们将在learn different ways to deletethe key from an object with examples

  • 使用删除操作符的语法
  • 为键赋值未定义
  • 使用Lodash的省略方法
  • 使用ramdaJS dissoc函数
  • ES6传播和销毁赋值语法的方法
  • underscorejs挑选和省略方法

以上方法都是对一个原始数组进行变异。

使用delete操作符来删除一个属性

delete 操作符用于从一个对象中删除键,其键和值从一个对象中删除。

语法:

delete object[key]; 
or
delete object.key

要点

  • 删除对象的自身属性
  • 如果键被删除,返回true;如果键不存在,返回false。
console.log(obj);
delete obj.company
for (const property in obj) {
    console.log(`${property}: ${obj[property]}`);
}
console.log(obj.company);

输出是

{ model: 'alto', company: 'Maruthi', type: 'car' }
model: alto
type: car
undefined

一步一步来

  • 声明并初始化一个对象
  • 通过使用 "删除 "操作将对象打印到控制台。console.log
  • 使用delete 操作符从一个对象中移除company 键和它的值。
  • 使用for in loop 语法迭代对象的键和值属性
  • 在循环迭代过程中,该属性被完全删除,并且在打印过程中不显示
  • Undefined 通过检索对象的删除键来打印。

和其他使用delete 的替代方法如下

delete obj['company']

delete operator 是可用的和简单的,但当你用循环迭代从大型对象中批量删除键时,delete不是最好的 ,性能非常慢。

将未定义的值分配给键

undefined 的值赋给key ,然后keyvalue 从对象中删除。

从性能上看,assignundefineddelete operator 快10倍。

重要的一点是:

  • 在这种方法中,它不会完全从对象中移除。
  • 正如你在例子中看到的,在for循环的迭代过程中,公司属性仍然是可见的,并且是未定义的值。
console.log(obj);
obj.company = undefined
console.log(obj);

输出是

{ model: 'alto', company: 'Maruthi', type: 'car' }
{ model: 'alto', company: undefined, type: 'car' }

使用Lodash的省略方法

lodash中的省略方法可以移除对象自身的属性,Omit method ,接受对象和要移除的键或键的列表。下面是一个例子

newobj = _.omit(obj, 'type');
console.log(newobj)

输出是

Object {company: "Maruthi", model: "alto"}

使用ramdaJS dissoc函数

ramdaJS实用程序库是具有dissoc功能的实用程序库。它接受第一个参数是要删除的键,第二个参数是一个源对象,并在删除键后返回新的对象。

R.dissoc('model', {"model": "alto","company": "Maruthi","type": "car"});

输出是

{company: "Maruthi", type: "car"}

ES6扩展和销毁赋值的语法方法

展开运算符销毁赋值是ES6语言的新特性。使用ES6语法是非常容易的

const { company, ...newobj } = obj;
console.log(newobj);

而输出是

{ model: 'alto', type: 'car' }

omit, pick method in underscorejs

这不是删除对象的键,而是通过过滤指定的键来复制原始对象的属性。这两个方法--pickomit 做的是同样的操作。

以下是语法

pick(object,keys)
omit(object,keys)

这个方法的输入是Objects是一个原始的源对象,keys是你想从目标对象中删除的keys列表。

var empObject = {"id": "1", "name": "Franc", "salary": "5000"};
let empIdNameObject=_.pick(empObject, "id", "name");
console.log(empIdNameObject)
let empIdObject=_.omit(empObject, "id");
console.log(empIdObject)

而输出是

{"id": "1", "name": "Franc"};
{"id": "1"};

如何从一个对象数组中删除一个属性或键

forEach 假设你有一个对象数组,想通过从数组中删除一个键来返回新的数组,Array ,该函数包含对每个对象调用的回调,使用delete 语法来删除并返回一个新的对象数组。

array.forEach(function(obj){ delete obj.key });

总结

希望这篇文章能教会你在javascript中从对象或对象数组中删除键的多种方法。