将数组转换为对象

2024-01-12

我正在尝试编写一个函数,它接受一个数组数组,并返回一个对象,其中数组中的每对元素作为键值对。我搜索了堆栈溢出并提出了以下代码。但是,我下面的代码仅返回第一个数组 { make: 'Ford' }。我的代码不返回其余的数组。关于为什么我的函数不返回数组数组的其余部分有什么建议吗?

var array = [
  ['make', 'Ford'],
  ['model', 'Mustang'],
  ['year', 1964]
];

function fromListToObject() {

  for (var i = 0; i < array.length - 1; ++i) {
    var object = {};
    //creates an object as a variable
    var newArray = array[i];
    //creates a variable for the array within the array
    object[i] = newArray[1];
    //sets the object of the element to position 1 of the array within the array
    object[newArray[0]] = object[i];
    //sets the key of the element to position 0 of the array within the array
    delete object[i];
    // removes the previous key of 0
    return object;
  }
}

console.log(fromListToObject(array));

您的代码有几个问题。

  • 目标对象重置为{}在每次迭代中。所以你应该移动var object = {}脱离你的循环。

  • 您从循环内部返回,循环立即结束:这应该发生after循环。

  • 你迭代的次数太少了。去除- 1:

       for (var i = 0; i < array.length; ++i) {
    
  • 有一个对数字属性的赋值,您稍后将其删除 2 行:这是一个成本高昂的操作,您应该避免。只需在一次操作中完成分配:

       object[newArray[0]] = newArray[1];
    

这是所有更正的内容:

var array = [['make', 'Ford'], ['model', 'Mustang'], ['year', 1964]];

function fromListToObject() {
  var object = {}; // out of the loop
  for (var i = 0; i < array.length; ++i) { // iterate to last
    var newArray = array[i];
    object[newArray[0]] = newArray[1];
  }
  return object; // out of the loop
}

var obj = fromListToObject(array);

console.log(obj);

ES6版本

如果你可以使用 ES6 语法,那么考虑这个解决方案:

function fromListToObject(array) {
    return Object.assign(...array.map( ([key,val]) => ({[key]: val}),{}));
}

const array = [['make', 'Ford'], ['model', 'Mustang'], ['year', 1964]];
const obj = fromListToObject(array);
console.log(obj);

使用地图

您可能还对 ES6 感兴趣Map https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Map对象,其工作方式与对象类似,可以通过最简单的方式从数组构造:

const mp = new Map(array);

然后您可以按如下方式访问键值:

mp.get('make') === 'Ford';

并迭代:

mp.forEach( function (val, key) {
    console.log(key, val);
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将数组转换为对象 的相关文章

随机推荐

  • ajax请求中变量丢失

    当尝试将变量作为参数传递给嵌套的 ajax 请求回调时 我遇到了奇怪的行为 form on submit function e ajaxSetup header meta name token attr content e preventD
  • chrome.tab.onactivated

    有人可以告诉我如何使用chrome tabs onActivated 如果 url 等于 我想刷新单击 激活的选项卡 www example com http www example com 或者 如果这是错误的方法 请告诉我该使用什么 首
  • 首次通过 URL 方案打开时 iOS 应用程序崩溃

    我的应用程序处理 URL 方案 当它已经运行并从另一个应用程序调用时 它的行为正确并且没有问题 但是 当它完全关闭时 如在非后台模式下 并且另一个应用程序调用它 它会立即崩溃 我已经设置了 等待可执行文件启动 选项 以便我可以调试appli
  • ES6模块是同步加载还是异步加载?

    模块加载器负责加载模块 我所知道的是 模块加载器在浏览器中异步加载模块 而在 Node js 中它是同步加载的 我想确认一下这个信息是否正确 ES6 模块加载器将是异步的 而 Node js 模块加载器则不是 以下是模块加载器的一些关键方面
  • 从 html 访问 $scope?

    由于愚蠢的第三方原因 我需要从html访问 scope 这就是我正在尝试的 Because angular是全局暴露的 你可以使用 var scope angular element scope 例如 如果您的标记中有此内容 div div
  • 我想在页面过期(419)显示时重定向到登录页面

    我在 handler php 中添加了这段代码 if exception instanceof Illuminate Session TokenMismatchException return redirect gt route login
  • 根据背景颜色改变汉堡菜单的颜色

    有一个白色的汉堡菜单 问题是 在我的项目中 由于背景不透明 网站的某些地方不可见 任务是编写一个脚本 该脚本应根据背景颜色将颜色更改为对比色 例如 在下面的代码中 在黑色背景上 菜单应变为白色 最初的计划是为每个块分配不同的ID 当菜单图标
  • 如何将 Apache 日志重定向到 STDOUT 和 Apache 日志文件

    我正在运行一个 docker 容器 想要将 apache 服务器的日志写入 STDOUT 和文件 知道我的 Apache httpd conf 文件需要什么样的配置吗 任何帮助将不胜感激 你可以试试这个 CustomLog usr bin
  • 如何将字符串写入远程服务器(linux)中的文件

    我试图构建一个小代码 在其中创建一些字符串并将该字符串传输到位于远程服务器中的文件 应在运行时创建 就我而言 远程服务器是 Linux 有人可以帮我吗 我正在使用 JSCH 和 ChannelSftp 但无法执行此操作 下面是我的代码 JS
  • Mono:堆部分太多当应用程序占用内存超过 4 GB 时,增加 MAXHINCR 或 MAX_HEAP_SECTS

    我正在具有 8 GB 内存的 bitnami linux 上运行我的单声道应用程序 它是一个复杂的文件合并应用程序 在运行时应该占用大量 RAM 但每次需要超过 4 GB 的 RAM 时 它都会崩溃并显示以下错误消息 Too many he
  • 底层连接在 HttpWebRequest POST 上关闭 在生产服务器上

    我收到 底层连接已关闭 连接意外关闭 尝试在生产服务器上使用 HttpWebRequest 类进行 POST 时出错 但在我的开发计算机上它工作正常 我最初尝试使用 WebClient 类 但我切换到 HttpWebRequest 来尝试研
  • 如何以分布式方式在本地启动drillbit?

    我下载了 Apache Drill v1 8 编辑了conf drill override conf进行以下更改 drill exec cluster id drillbits1 zk connect 10 178 23 140 2181
  • Ravendb - 自动生成自己的密钥

    我当前有一个对象 它有一个名为 Id 的公共属性 当我存储对象时 我希望 Id 成为数据的一部分 而不是像当前那样成为文档 Id 创建文档存储时 我仅设置连接字符串 using var session documentStore OpenS
  • 无法在 Intellij 中运行 Scala 文件

    我在 Intellij IDEA 14 4 社区版中建立了一个加特林项目 我安装了 Scala 插件 并且项目配置似乎是正确的 因为我没有看到内联错误并且编译工作正常 不过 我在一些教程中指出 您也可以通过右键单击当前文件并选择运行或调试来
  • 停止 ruby​​ http 请求修改标头名称

    我正在 ruby 中执行 http 请求 http Net HTTP new uri host uri port req Net HTTP Post new uri path req body payload req customehead
  • 如果包含一个空格,Pandas 将名称列拆分为名字和姓氏

    假设我有一个 pandas DataFrame 其中包含如下名称 name df pd DataFrame name Jack Fine Kim Q Danger Jane Smith Juan de la Cruz name 0 Jack
  • 索引所有列

    知道索引列会带来更好的性能 那么是否值得对数据库的所有表中的所有列进行索引 这种方法的优点 缺点是什么 如果值得的话 有没有办法在SQL Server中自动创建索引 我的应用程序动态添加表和列 取决于用户配置 我希望它们自动索引 由于上述原
  • PHPUnit - 通过命令行测试运行程序运行特定的测试套件[重复]

    这个问题在这里已经有答案了 是否可以通过命令行测试运行程序从配置文件指定要运行哪个测试套件 例如 如果我有以下 xml 配置
  • 刷新元素组

    我有一个 JSF 页面 它本质上只是数据行和列 每行的数据都来自类实例的属性 每行上都有一个链接 单击该链接时会调用一个支持 bean 方法来刷新该行上的数据 行由代表其下方的行组的标题分隔 我也想将标题设为链接 以便它将刷新其下方的所有行
  • 将数组转换为对象

    我正在尝试编写一个函数 它接受一个数组数组 并返回一个对象 其中数组中的每对元素作为键值对 我搜索了堆栈溢出并提出了以下代码 但是 我下面的代码仅返回第一个数组 make Ford 我的代码不返回其余的数组 关于为什么我的函数不返回数组数组