js Object.keys方法

基础用法

Object.keys 是 JavaScript 中的一个方法,用于获取对象自身的可枚举属性名称,并以数组形式返回。

Object.keys(obj)
  • 参数:要返回其枚举自身属性的对象
  • 返回值:一个表示给定对象的所有可枚举属性的字符串数组

不同入参的返回值
【处理对象,返回可枚举的属性数组】

let person = {name:"张三",age:25,address:"深圳",getName:function(){}}

Object.keys(person) 

// ["name", "age", "address","getName"]

【处理数组,返回索引值数组】

let arr = [1,2,3,4,5,6]
Object.keys(arr) 
// ["0", "1", "2", "3", "4", "5"]

【处理字符串,返回索引值数组】

let str = "saasd字符串"
Object.keys(str) 
// ["0", "1", "2", "3", "4", "5", "6", "7"]

常用技巧

Object.keys在处理对象属性、遍历对象和动态生成内容时非常有用。

遍历对象属性

当你需要遍历一个对象的属性时,Object.keys 可以将对象的所有属性名以数组形式返回,然后你可以使用 forEachfor…of 来遍历这些属性名。

const person = {
  name: '员工1',
  age: 30,
  profession: 'Engineer'
};

Object.keys(person).forEach(key => {
  console.log(key + ': ' + person[key]);
});
//name: 员工1
//age: 30
//profession: Engineer

获取对象属性的数量

可以使用 Object.keys 获取对象的属性名数组,然后通过数组的 length 属性来确定对象中属性的数量。

const person = {
  name: '员工2',
  age: 30,
  profession: 'Engineer'
};

const numberOfProperties = Object.keys(person).length;
console.log(numberOfProperties); // 输出: 3

过滤对象属性

可以使用 Object.keys 来获取对象的属性名数组,然后使用数组的 filter 方法来筛选属性名,从而创建一个新的对象。

const person = {
  name: '员工3',
  age: 30,
  profession: '钢铁直男'
};

const filteredKeys = Object.keys(person).filter(key => key !== 'age');
const filteredPerson = {};

filteredKeys.forEach(key => {
  filteredPerson[key] = person[key];
});

console.log(filteredPerson); // 输出: { name: '员工3', profession: '钢铁直男' }

检查对象是否为空

可以通过检查 Object.keys 返回的数组长度来确定对象是否为空。

const emptyObject = {};
const nonEmptyObject = { name: '讨厌的人' };

function isEmpty(obj) {
  return Object.keys(obj).length === 0;
}

console.log(isEmpty(emptyObject));  // 输出: true
console.log(isEmpty(nonEmptyObject)); // 输出: false

深拷贝对象

虽然 Object.keys 本身并不能进行深拷贝,但它可以与其他方法结合使用来创建对象的深拷贝,特别是当对象的属性是另一层对象时。

const person = {
  name: '快乐就是哈哈哈',
  age: 18,
  profession: 'coder',
  address: {
    city: 'Wonderland',
    postalCode: '12345'
  }
};

function deepCopy(obj) {
  const copy = {};
  Object.keys(obj).forEach(key => {
    if (typeof obj[key] === 'object' && obj[key] !== null) {
      copy[key] = deepCopy(obj[key]);
    } else {
      copy[key] = obj[key];
    }
  });
  return copy;
}

const copiedPerson = deepCopy(person);
console.log(copiedPerson);
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值