(详解)Object.keys() Object.values() Object.entries()

news2024/11/19 3:37:49

目录

一、Object.keys(obj)

 二、Object.values()

三、Object.entries()


一、Object.keys(obj)

  • 参数:要返回其枚举自身属性的对象
  • 返回值:一个表示给定对象的所有可枚举属性的字符串数组
  1. 处理对象,返回可枚举的属性数组
let person = {name:"张三",age:25,address:"深圳",getName:function(){}};
console.log(Object.keys(person));

        2.处理数组,返回索引值数组

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

        3.处理字符串,返回索引值数组

let str = "abc";
console.log(Object.keys(str));  // ["0", "1", "2"]

        4.常用技巧

let person = {name:"张三",age:25,address:"深圳",getName:function(){}};
Object.keys(person).map((key)=>{
    console.log(person[key]);  // 获取到属性对应的值,做一些处理
})

 二、Object.values()

        1.返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历属性的键值

let obj = {
    foo : "bar",
    baz : 20
};
console.log(Object.values(obj));  // ["bar", 20]

         2.返回数组的成员顺序,与属性的遍历部分介绍的排列规则一致

const obj = {100 : "a", 2 : "b", 7 : "c"};
console.log(Object.values(obj));   //["b", "c", "a"]
  • 属性名为数值的属性,是按照数值大小,从小到大遍历的,因此返回的顺序是b、c、a。

3.Object.values()只会遍历对象自身的可遍历属性

const obj = Object.create({},{p : {value : 10}});
console.log(Object.values(obj));    
console.log(Object.getOwnPropertyDescriptors(obj));

  • Object.create方法的第二个参数添加的对象属性(属性p),如果不显式声明,默认是不可遍历的,因为p的属性描述对象的enumerable默认是false,Object.values不会返回这个属性。

因此只要把enumerable改成true,Object.values就会返回属性p的值。 

const obj = Object.create({},{p:{
     value : 10,
     enumerable : true,
     configurable : true,
     writable : true,
}})
console.log(Object.values(obj));    //[10]

         4.Object.values会过滤属性名为 Symbol 值的属性

//如果Object.values方法的参数是一个字符串,会返回各个字符组成的一个数组。
Object.values({ [Symbol()]: 123, foo: 'abc' });
console.log(Object.values('foo'));  //["f", "o", "o"]
  • 字符串会先转成一个类似数组的对象,字符串的每个字符,就是该对象的一个属性。因此,Object.values返回每个属性的键值,就是各个字符组成的一个数组

        5.如果参数不是对象,Object.values会先将其转为对象

console.log(Object.values(42));  // []
console.log(Object.values(true));  // []
console.log(Object.values(undefined));   //error
console.log(Object.values(null));   //error
  • 由于数值和布尔值的包装对象,都不会为实例添加非继承的属性,因此Object.values会返回空数组。

三、Object.entries()

1.Object.entries方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值对数组

var obj = { foo: 'bar', baz: 42 };
console.log(Object.entries(obj));

 

2.如果原对象的属性名是一个 Symbol 值,该属性会被省略

console.log(Object.entries({ [Symbol()]: 123, foo: 'abc' }));  // [ [ 'foo', 'abc' ] ]
  • 原对象有两个属性,Object.entries只输出属性名非 Symbol 值的属性。

3.遍历对象的属性

let obj = {
    one : 1,
    two : 2,
}
for(let [k , v] of Object.entries(obj)){
     console.log(`${JSON.stringify(k)} : ${JSON.stringify(v)}`);
}

4.将对象转为真正的Map结构

const obj = {foo : "bar", baz : 10};
const map = new Map(Object.entries(obj));
console.log(map); 

 

5.实现Object.entries方法

const entries = (obj) => {
     let result = [];
     const objType = typeof(obj);
     if(obj === undefined || obj === null){
          throw new TypeError();
     }
     if(objType === "number" || objType === "boolean"){
         return [];
     }
     for(let k of Object.keys(obj)){
         result.push([k,obj[k]]);
     }
     return result
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/502759.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【机器学习实战】Python基于K均值K-means进行聚类(九)

文章目录 1 前言1.1 K-means的介绍1.2 K-means的应用 2 demo实战演示2.1 导入函数2.2 创建数据2.3 拟合聚类2.4 查看结果 3 使用高级技术评估集群性能*3.1 导入函数3.2 整合数据3.3 计算 4 讨论 1 前言 1.1 K-means的介绍 K均值(K-means)是一种基于距离…

改写句子的软件有哪些-免费改写文章的软件

改写句子的软件 改写句子的软件是一种广泛应用于文字处理的工具,其主要作用是通过对原文中的语言结构和表述方式进行调整和优化,以改进文章的质量和可读性。改写句子的软件广泛用于新闻报道、科学文章、学术论文、书籍等各类文本材料中,旨在…

Elasticsearch的索引库和文档操作、RestClient的索引库和文档操作

一、Elasticsearch Linux系统通过Docker安装Elasticsearch、部署kibana 1.Elasticsearch Elasticsearch 是位于 Elastic Stack 核心的分布式搜索和分析引擎。Logstash 和 Beats 有助于收集、聚合和丰富您的数据并将其存储在 Elasticsearch 中。Kibana 使您能够以交互方式探索…

梅果提取物激增2782%?因字成分崛起|3月功效成分TOP100

全文速览 全文字数:6015字 阅读时长:8-12分钟 1.目前已有11款新原料成分进入监测期,三月新原料备案占比达27.1%。 2.天赐高新成为仅次于美国路博润的全球第二大卡波姆供应商,市占率将近两成。 3.氨基酸洗面奶凭多重功效替代皂…

Flink Dashboard的数据监控功能

一、数据反压 1.1 数据反压是啥 数据反压是在实时数据处理中,数据处理流的某个节点上游产生数据的速度大于该节点处理数据速度,导致数据堆积,从该节点向上游传递,一直到数据源,并降低数据源的摄入速度。导致数据反压…

如何远程内网电脑

要远程访问内联网计算机,您需要遵循以下一般步骤: 连接到与目标计算机相同的局域网 (LAN)。 这可能涉及到现场或使用 VPN 远程连接到 LAN。 获取目标计算机的 IP 地址或网络名称。 确保在目标计算机上启用了远程桌面访问。 使用远程桌面软件与目标计…

ASP.NET Core 8 中身份验证的改进

ASP.NET Core 团队正在改进 .NET 8 中的身份验证、授权和身份管理(统称为“身份验证”)。新的 APIs 将使自定义用户登录和身份管理体验变得更加容易。新的端点将在没有外部依赖的单页应用程序(SPA)中启用基于令牌的身份验证和授权。我们还将改进我们的指引和文档,使…

数据结构绪论

数据结构绪论 1.数据结构 数据结构 数据结构是相互之间存在一种或多种特定关系的数据元素的集合。数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及他们之间的关系和操作等相关问题的学科。 数据 数据:是描述客观事物的符号,是计算机中可以…

Dtop环球嘉年华全球Web3.0分布式私域电商生态发展峰会圆满举办

5月7日,Dtop环球嘉年华全球Web3.0分布式跨境私域电商生态发展峰会暨战略合作备忘录签署仪式在马来西亚首都吉隆坡隆重举办。此次峰会汇集了Dtop环球嘉年华韩国、新加坡、澳洲、泰国、印尼等国家的社区联合发起人,环球自治商学院地区代表及来自Dtop环球嘉年华不同国家的粉丝用户…

nas各种共享访问协议的使用(smb,nfs,ftp,ftps,sftp,afp,webdav)

使用群晖、UNRAID、FREENAS等NAS系统的小伙伴肯定会有传输文件的需求,无论是在本地局域网还是远端设备,这种情况下当然可以使用群晖的WEB管理界面中File Station,但是这种方式便捷性不够,于是nas与本地设备文件的传输最好的方式是…

lua | table表的使用操作

目录 lua table表 表的构造 Table的使用 table.concat() table.insert()与table.remove() table.sort() table.maxn() 本文章为笔者学习分享 学习网站:Lua 基本语法 | 菜鸟教程 lua table表 table:是lua的一种数据结构,用来帮助我们…

为什么Windows 10电脑运行缓慢?如何解决?

​虽然电脑是大家生活中的常用工具,但它经常会出现一些烦人的小问题,比如Windows 10系统在长时间使用后运行会变的缓慢。这时你必须等待一会才能打开/关闭电脑、打开和访问文件夹或软件,那要如何优化Windows 10电脑来解决运行缓慢的问题呢&am…

如何在 Espressif-IDE 中使用 Wokwi 模拟器

乐鑫近期已发布 Espressif-IDE v2.9.0,您可直接在此版本的 IDE 中使用 Wokwi 模拟器。 什么是 Wokwi 模拟器? Wokwi 是一款在线电子模拟器,支持模拟各种开发板、元器件和传感器,例如乐鑫产品 ESP32。 Wokwi 提供基于浏览器的界面…

C++学习day--08 数组和字符串

1、什么是数组 数组,就是多个元素的有序“组合”。 C 和 C语言中的数组: 1 )由多个大小相同的小柜子组成 > 相同大小的内存块组成,即相同类型的数据 2 )这些小柜子,有自己对应的编号 > 编号从 …

软考中级工程师笔记(持续更新)

进制 正负0 -0原000110010000 1000反000111100000 1111补000111110000 0000 取值范围 原 -(2n-1)-1~(2n-1)-1 数量 [(2n-1)-1]-[-(2n-1)-1] 1(1代表0)(2*2n-1)-1**2n-1** 反 -(2n-1)-1~(2n-1)-1 数量 [(2n-1)-1]-[-(2n-1)-1] 1(1代表0)(2*2n-1)-1**2n-1** 补 -(2n-1)~(2n-…

算法设计 || 实验一 用分治法实现元素的归并与检索 (头歌详解+本题分析笔记)

目录 (一)递归与分治是个啥? 1.递归(归并排序) 2.分治(二分检索算法) (二)头歌代码怎么写? (三)代码部分详解: &…

Android内嵌Unity (Activity)

Unity2019.4.4 AndropidStudio4.2.1 参考文档: Android内嵌Unity并实现互相跳转的实例代码_Android_脚本之家 Android Fragment中加载,嵌套Unity视图_unity 导入并作为fragment_周灬浩的博客-CSDN博客 本文只实现了Activity整个切换过去,而Fragment…

WSL2 ubuntu ip 自动同步 、静态ip(解决wsl2 ip 每次开机ip会变化的问题)

​ 利用python脚本解决wsl2 ip不固定的问题 环境信息 ​ wsl2 中linux版本:ubuntu ​ windows版本: win10/win11 问题描述 最近装了wsl2,使用vscode远程连接wsl2时遇到了如下问题: 1、wsl2的ip无法固定 2、wsl2的ssh服务不能…

vue项目使用element-ui

最近新建一个vue项目,配置了element-ui,较之前使用时发生了些许变化,对新的配置方式进行记录 node版本 v14.21.3 npm版本 v6.14.18 vue版本 v2.6.14 element-ui版本 v2.15.13 创建项目vue项目,使用…

设计原则之【迪米特法则】

文章目录 一、什么是迪米特法则1、理解迪米特法则2、如何理解“高内聚、松耦合”? 二、实例1、实例12、实例2 一、什么是迪米特法则 迪米特原则(Law of Demeter LoD)是指一个对象应该对其他对象保持最少的了解,又叫最少知道原则&…