Object.entries()的使用

189 阅读1分钟

# 有关 Object.entries() 方法的详解

Object.entries(obj) 返回给定对象自身可枚举属性的键值对数组

参数

可以返回其可枚举属性的键值对的对象

返回值

返回一个数组,其元素是数组(与直接在 参数obj 上找到的可枚举属性键值对相对应的 数组

举例

getMacAdress.ts 获取Mac地址

import { networkInterfaces } from 'os';
const zeroRegex = /(?:[0]{1,2}[:-]){5}[0]{1,2}/;

export function getMacAdress() {
  const list = networkInterfaces();
  console.log('list:',list)
/*
{
  Loopback Pseudo-Interface 1: [
    {
      address: '::1',
      netmask: 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff',
      family: 'IPv6',
      mac: '00:00:00:00:00:00',
      internal: true,
      cidr: '::1/128',
      scopeid: 0
    },
    {
      address: '127.0.0.1',
      netmask: '255.0.0.0',
      family: 'IPv4',
      mac: '00:00:00:00:00:00',
      internal: true,
      cidr: '127.0.0.1/8'
    }
  ],
  WLAN: [
    {
      address: 'fe80::f433:2bc5:16f8:7414',
      netmask: 'ffff:ffff:ffff:ffff::',
      family: 'IPv6',
      mac: 'cc:6b:1e:97:11:55',
      internal: false,
      cidr: 'fe80::f433:2bc5:16f8:7414/64',
      scopeid: 19
    },
    {
      address: '192.168.1.105',
      netmask: '255.255.255.0',
      family: 'IPv4',
      mac: 'cc:6b:1e:97:11:55',
      internal: false,
      cidr: '192.168.1.105/24'
    }
  ]
}
*/
  console.log('Object.entries(list):',Object.entries(list))
/*
[
  [ 'WLAN', [ [Object], [Object] ] ],
  [ 'Loopback Pseudo-Interface 1', [ [Object], [Object] ] ]
]

即:
[
  [ 'WLAN', [
    [{
      address: 'fe80::f433:2bc5:16f8:7414',
      ...
      scopeid: 19
    }],
    [{
      address: '192.168.1.105',
      ...
      cidr: '192.168.1.105/24'
    }]
             ]
  ],

  [ 'Loopback Pseudo-Interface 1', [
    [{
      address: '::1',
      ...
      scopeid: 0
    }],
    [{
      address: '127.0.0.1',
      ...
      cidr: '127.0.0.1/8'
    }]
                                   ]
  ]
  
]
*/
  for (const [_key, parts] of Object.entries(list)) {
    if (!parts) continue;
    console.log(`_key: ${_key} parts: ${parts}`)

    for (const part of parts) {
      console.log('part:', part)
      if (zeroRegex.test(part.mac) === false) {
        console.log(part.mac);
        return part.mac;
      }
    }
  }
        /*第一次循环:
      _key: WLAN parts: [object Object],[object Object]

      part: {
      address: 'fe80::f433:2bc5:16f8:7414',
      ...
      scopeid: 19
      }

      part.mac: cc:6b:1e:97:11:55

      part: {
      address: '192.168.1.105',
      ...
      cidr: '192.168.1.105/24'
      }

      part.mac: cc:6b:1e:97:11:55

     */

      /*第二次循环:
      _key: Loopback Pseudo-Interface 1 parts: [object Object],[object Object]

      part: {
      address: '::1',
      ...
      scopeid: 0
      }

      part: {
      address: '127.0.0.1',
      ...
      cidr: '127.0.0.1/8'
      }
     */
  return '';
}