js对象与数组的互转

js对象与数组的互转

文章目录

    • js对象与数组的互转
      • 一、数组转对象
        • 1.使用forEach,for in,es6展开运算符,assign
        • 2. 使用 `Object.fromEntries()`
        • 3. 将数组转为键值对对象
        • 4. 使用 `reduce()`
        • 4. 数组元素为对象时提取属性
      • 二、对象转数组
        • 1. 提取键/值/键值对
        • 2. 转换为特定结构的数组
      • 三、注意事项

一、数组转对象

1.使用forEach,for in,es6展开运算符,assign
let arr = [{ id: 1, name: '张三' },{ id: 2, name: '李四' }]
let obj = {}
//1.forEach
arr.forEach(item => obj[item.value] = item.name)
console.dir(obj)//{1: "张三",2: "李四"}// 2.使用for in 遍历
for(let key in arr) { //这里key索引obj[key] = arr[key]
}// 3.使用es6展开运算符
var arr = [1,2,3,4,5,6]
let obj = {}
let obj = {...arr}// 4. assign
var arr = [1,2,3,4,5,6]
let obj = {}
obj = (Object.assign({}, array)
console.log(obj);// {1,2,3,4,5,6}
2. 使用 Object.fromEntries()

适用于将键值对数组转换为对象(ES2019+):

const arr = [['name', 'Alice'], ['age', 25]];
const obj = Object.fromEntries(arr);
// 结果:{ name: 'Alice', age: 25 }
3. 将数组转为键值对对象

场景:将数组的索引作为键,元素作为值(例如 [A, B, C]{0: A, 1: B, 2: C})。

const arr = ["a", "b", "c"];
const obj = Object.assign({}, arr);
// 结果:{0: 'a', 1: 'b', 2: 'c'}
4. 使用 reduce()

将普通数组或复杂结构转换为对象:

// 数组元素为对象,按 id 合并
const arr = [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}];
const obj = arr.reduce((acc, curr) => {acc[curr.id] = curr;return acc;
}, {});
// 结果:{1: {id:1,name:'Alice'}, 2: {id:2,name:'Bob'}}
4. 数组元素为对象时提取属性

场景:将数组中的对象提取特定属性,合并成新对象。

const users = [{ id: 1, name: "Alice" },{ id: 2, name: "Bob" }
];
const obj = Object.fromEntries(users.map(user => [user.id, user.name]));
// 结果:{1: 'Alice', 2: 'Bob'}

二、对象转数组

1. 提取键/值/键值对
const obj = { a: 1, b: 2, c: 3 };// 键数组
const keys = Object.keys(obj); // ['a', 'b', 'c']// 值数组
const values = Object.values(obj); // [1, 2, 3]// 键值对数组
const entries = Object.entries(obj); // [['a',1], ['b',2], ['c',3]]
2. 转换为特定结构的数组

使用 Object.entries() + map() 转换数据格式:

const obj = { a: 1, b: 2 };
const arr = Object.entries(obj).map(([key, value]) => ({ [key]: value }));
// 结果:[{a:1}, {b:2}]

三、注意事项

  1. 键名冲突Object.fromEntries() 会覆盖重复键名的值。
  2. 兼容性Object.fromEntries() 在 IE 中不支持,需通过 polyfill 或手动实现。
  3. 稀疏数组:对象转数组时,稀疏数组的 undefined 值会被忽略。

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

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

相关文章

HTTPS在信息传输时使用的混合加密机制,以及共享、公开密钥加密的介绍。

HTTPS在信息传输时使用的混合加密机制,其中包括了共享密钥加密和公开密钥加密,我们先来介绍一下这两种加密方式。 共享密钥加密(对称密钥) 对称加密是指加密和解密使用的是同一个密钥。就像家里的门锁,钥匙只有一把&…

Oracle 23ai Vector Search 系列之4 VECTOR数据类型和基本操作

文章目录 Oracle 23ai Vector Search 系列之4 VECTOR数据类型和基本操作VECTOR 数据类型基本语法Vector 维度限制和向量大小向量存储格式(DENSE vs SPARSE)1. DENSE存储2. SPARSE存储3. 内部存储与空间计算 Oracle VECTOR数据类型的声明格式VECTOR基本操…

机器学习——ROC曲线、PR曲线

一、ROC曲线简介 1.1 ROC曲线的构成 1.横轴(假正率,FPR): 表示负样本被错误分类为正的比例(越小越好) 2.纵轴(真正率,TPR,即召回率): 表示正样…

IntelliJ IDEA下开发FPGA——FPGA开发体验提升__上

前言 由于Quartus写代码比较费劲,虽然新版已经有了代码补全,但体验上还有所欠缺。于是使用VS Code开发,效果如下所示,代码样式和基本的代码补全已经可以满足开发,其余工作则交由Quartus完成 但VS Code的自带的git功能&…

昂贵的DOM操作:一次DOM导致的性能问题排查记录

公司来了一个前端实习生,踏实,勤快,很快得到老大的认可,分配给她一个需求,大概如下:构建一个公司产品的评论展示页面,页面可以滚动加载新的内容,同时如果已经加载的内容发生变化&…

前端服务配置详解:从入门到实战

前端服务配置详解:从入门到实战 一、环境配置文件(.env) 1.1 基础结构 在项目根目录创建 .env 文件: # 开发环境 VUE_APP_API_BASE_URL http://localhost:3000/api VUE_APP_VERSION 1.0.0# 生产环境(.env.produc…

【学习笔记】计算机网络(七)—— 网络安全

第7章 网络安全 文章目录 第7章 网络安全7.1 网络安全问题概述7.1.1 计算机网络面临的安全性威胁7.1.2 安全的计算机网络7.1.3 数据加密模型 7.2 两类密码体制7.2.1 对称密钥密码体制7.2.2 公钥密码体制 7.3 鉴别7.3.1 报文鉴别7.3.2 实体鉴别 7.4 密钥分配7.4.1 对称密钥的分配…

我用Cursor + DeepSeek + Claude-3.7-Sonnet + DevBox,10分钟开发了一个系统

大家好,我是袁庭新。Cursor最近可谓是火的一塌糊涂,于是我深度体验了一波。我用的环境是Cursor Claude-3.7-Sonnet DevBox,整个过程我一行代码都没有写,10分钟帮我开发了一个系统,且前后端联调一把通过。惊出一身冷汗…

SpringBoot企业级开发之【用户模块-登录】

开发之前我们先看一下接口文档的要求: 开发思路: 开发实操: 因为我们之前开发注册的时候,就有了一些相关的操作,所以在这里我们只需要定义登录的controller即可: //用户登录PostMapping("/login"…

mysql 8.0.27-docker

安装 可以略过本步 https://dev.mysql.com/downloads/https://dev.mysql.com/downloads/ 镜像查询与安装 先查询: docker search mysql 明显会报错 Error response from daemon: Get "https://index.docker.io/v1/search?qmysql&n25": dial tcp…

Pgvector的安装

Pgvector的安装 向量化数据的存储,可以为 PostgreSQL 安装 vector 扩展来存储向量化数据 注意:在安装vector扩展之前,请先安装Postgres数据库 vector 扩展的步骤 1、下载vs_BuildTools 下载地址: https://visualstudio.microso…

Python高阶函数-sorted(深度解析从原理到实战)

一、sorted()函数概述 sorted()是Python内置的高阶函数,用于对可迭代对象进行排序操作。与列表的sort()方法不同,sorted()会返回一个新的已排序列表,而不改变原数据。 基本语法 sorted(iterable, *, keyNone, reverseFalse)二、核心参数详…

ArcGIS Pro/GeoScene Pro AI 助手 2.1

引言 面对ArcGIS Pro/GeoScene Pro复杂的操作界面和脚本开发需求,你是否还在为功能定位、代码调试和效率优化而烦恼?今天,推出自制的Pro AI助手2.0版本,七大核心功能将革新你的GIS工作方式!无论是界面操作指引、一键生…

如何将本地更改的README文件同步到自己的GitHub项目仓库

如何将本地更改的 README 文件同步到 GitHub 仓库 在你 git clone 下来的工程目录下: 先使用 robocopy YOUR\SOURCE\CODE\DIR YOUR\GIT\CLONE\DIR /E /XD .git /DCOPY:T 将你的更改Copy到你git下来的工程中(上面的命令会自动处理,例如只会C…

PostIn V1.0.8版本发布,IDEA 插件支持一键扫描上报,让接口定义不再繁琐

PostIn是一款国产开源免费的接口管理工具,包含项目管理、接口调试、接口文档设计、接口数据MOCK等模块,支持常见的HTTP协议、websocket协议等,支持免登陆本地接口调试,同时可以对项目进行灵活的成员权限、消息通知管理等。本周Pos…

UE5学习笔记 FPS游戏制作36 UI动画

文章目录 目的效果创建动画UI准备制作动画 播放动画目的效果创建动画UI准备制作动画 播放动画注册播放事件 目的效果 我们要创建一个提示动画,文字先渐显,然后向上移动,同时渐隐 创建动画 UI准备 创建一个UI控件,然后创建一个…

HTTP 响应头 Strict-Transport-Security 缺失漏洞

HTTP 响应头 Strict-Transport-Security 缺失漏洞 这个漏洞就是说明网站的HTTP响应头中没有设置Strict-Transport-Security,没有设置则可以通过将https自己手动改成htttp的方式进行访问。不安全 解决方法 1.nginx配置 nginx中增加如下配置: location / …

代理模式的优缺点是什么?

什么是代理模式? 代理模式(Proxy Pattern)是一种结构型设计模式,它通过创建代理对象来控制对原始对象的访问。 这种模式在前端开发中广泛应用,特别是在需要控制对象访问、添加额外逻辑或优化性能的场景中。 ​​核心…

【嵌入式学习3】UDP发送端、接收端

目录 1、发送端 2、接收端 3、UDP广播 1、发送端 from socket import *udp_socket socket(AF_INET,SOCK_DGRAM) udp_socket.bind(("127.0.0.1",3333))data_str "UDP发送端数据" data_bytes data_str.encode("utf-8") udp_socket.sendto(d…

AI重构SEO关键词精准布局

内容概要 在传统SEO策略面临搜索场景碎片化、用户意图复杂化的挑战下,AI技术通过多维数据分析与算法建模,正在重构关键词布局的逻辑框架。基于自然语言处理(NLP)的语义分析能力,AI可精准识别搜索词背后的需求层级&…