【问题标题】:snippet for creating object from destructured array用于从解构数组创建对象的片段
【发布时间】:2018-03-07 16:24:09
【问题描述】:

例如,我有一个包含 3 个数字的数组:

var arr = [124, -50, 24];

我需要将此数组转换为对象:

{
   x: 124,
   y: -50,
   z: 24
}

我不想为此使用“旧式”语法,例如:

{
  x: arr[0],
  y: arr[1],
  z: arr[2]
}

所以现在,我正在使用该语法:

const [x, y, z] = [...arr];
const obj = {x, y, z};

但是,有没有什么方法可以直接解构数组到对象而不需要临时变量?

【问题讨论】:

  • 我的头顶var obj = (([x,y,z]) => ({x,y,z}))(arr);
  • 我认为这是相似的:stackoverflow.com/questions/38242744/…
  • @JaromandaX: 一样吗?一样的吗?
  • It remains only to understand what is going on there @VladPovalii 它是箭头函数 ([x,y,z]) => ({x,y,z}) 的 IIFE。但是imo你应该存储这个函数const arr2point = ([x,y,z]) => ({x,y,z});并使用那个const obj = arr2point(arr)而不是使用IIFE内联。

标签: javascript arrays ecmascript-6


【解决方案1】:

正如comment 中已经提到的,您可以使用Immediately Invoked Function Expression (IIFE) 在一个步骤中创建对象,但它的可读性不如多个步骤。

const arr = [124, -50, 24];
const obj = (([x, y, z]) => ({ x, y, z }))(arr);

console.log(obj);

【讨论】:

  • 哈哈。我错误地更改了排序顺序,并且弹出了这个问题。我已经像新的一样回答了它(没有真正看过 cmets),并且完全忘记了它。
  • :) 反正没关系..最后这个问题会有正确的答案,所以谢谢!
【解决方案2】:

就用这个

let obj = {...arr}

【讨论】:

  • 不太对,因为你要控制对象的键命名(“x”、“y”、“z”)——但是在这个键之后会是:“0”、“1”、 “2”
【解决方案3】:

你也可以这样做

const obj = {};
([obj.x, obj.y, obj.z] = arr);

为了避免临时变量,但我怀疑这是否是一种改进。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-04
    • 1970-01-01
    • 2019-09-10
    • 1970-01-01
    • 2021-12-06
    相关资源
    最近更新 更多