每天温习一个JS方法之Object.keys方法 第四天

1. 描述

Object.keys() 返回一个所有元素为字符串的数组,其元素来自给定的 object 上面可直接枚举的属性。这些属性的顺序与手动遍历该对象属性时的一致。

1.1 语法

Object.keys(obj)

参数:

  • obj:要返回其枚举自身属性的对象

1.2 返回值

一个表示给定对象的所有可枚举属性的字符串数组

2. 应用

2.1 范例

  • 简单数组
const arr = ['a', 'b', 'c', 'd'];
console.log(Object.keys(arr)); // 输出 ['0', '1', '2', '3']
  • 类数组对象
const arr = {
    
     1: 'a', 2: 'b', 3: 'c', 4: 'd' };
console.log(Object.keys(arr)); // 输出  ['1', '2', '3', '4']
  • 具有随机键顺序的类数组对象
const arr = {
    
     112: 'a', 23: 'b', 3: 'c', 43: 'd' };
console.log(Object.keys(arr)); // 输出 ['3', '23', '43', '112']

const arr = {
    
     a: 'a', d: 'b', c: 'c', b: 'd' };
console.log(Object.keys(arr)); // 输出 ['a', 'd', 'c', 'b']
  • 遇不可枚举属性
const myObj = Object.create(
	{
    
    },
    {
    
    
      	getFoo: {
    
    
        	value() {
    
    
          		return this.foo;
        	},
      	},
    }
);
myObj.a = 1;
console.log(Object.keys(myObj)); // 输出 ['a']

2.2 遍历对象属性

const obj = {
    
     a: 1, b: 3, c: 5 };
Object.keys(obj).map((key) => {
    
    
  console.log('key:' + key + ',value:' + obj[key]);
  // 依次输出
  // key:a,value:1
  // key:b,value:3
  // key:c,value:5
});

2.3 删除不符条件的对象属性

const obj = {
    
     a: 1, b: 3, c: 5, d: 7 };
Object.keys(obj).map((key) => {
    
    
  obj[key] < 4 ? delete obj[key] : '';
});
console.log(obj); // 输出 {c: 5, d: 7}

2.4 重赋数组对象中不符条件的对象属性

const arr = [
    {
    
     id: 1, value: 100, key: undefined },
    {
    
     id: 2, value: null, key: undefined },
    {
    
     id: 3, value: undefined, key: null },
];
arr.map((obj) => {
    
    
  Object.keys(obj).map((key) => {
    
    
    Boolean(obj[key])
      ? ''
      : key === 'value'
      ? (obj[key] = 0)
      : (obj[key] = '');
  });
});
console.log(arr);
// 输出
/* [
    {
        "id": 1,
        "value": 100,
        "key": ""
    },
    {
        "id": 2,
        "value": 0,
        "key": ""
    },
    {
        "id": 3,
        "value": 0,
        "key": ""
    }
] */

2.5 注意

console.log(Object.keys('abc')); // 输出 ['0', '1', '2']
  1. ES5里,如果此方法的参数不是对象(而是一个原始值),那么它会抛出 TypeError

  2. ES2015 中,非对象的参数将被强制转换为一个对象。

Object.keys 还有诸多与其它方法联用的应用,熟悉它,相信你在逻辑处理过程中能够广泛应用到

猜你喜欢

转载自blog.csdn.net/News777/article/details/127358531