【问题标题】:Javascript map an array to a new one with defined keysJavascript 将数组映射到具有定义键的新数组
【发布时间】:2017-03-21 15:55:52
【问题描述】:

我需要的是转换这个数组

[
   0: {id: 1},
   1: {id: 2}
]

[
   1: {id: 1},
   2: {id: 2}
]

我想只是切换键,我尝试使用 .map 但我能更改的只是值而不是键

【问题讨论】:

  • 是数组吗?你确定吗?
  • 数组没有键,它们的索引应该以0 开头并且没有孔。你真正想要什么,你的actual problem是什么?
  • 不可能。见here

标签: javascript ecmascript-6


【解决方案1】:

我认为您可以使用reduce 轻松解决它

它从一个空数组开始,在每次迭代期间,在 items id 字段的索引处添加 1 个项目。

这将为您提供一个长度可能不是您预期的数组,因此我建议您更深入地了解您的要求。

var arr = [
   {id: 1},
   {id: 2}
];

var result = arr.reduce( (container, item) => { 
  container[item.id] = item; 
  return container;
}, [] );
console.log( result[1] );
console.log( result[2] );
console.log( result );

您总是可以使用几乎相同的语法将其设为具有正确键的对象

    var arr = [
       {id: 1},
       {id: 2}
    ];

    var result = arr.reduce( (container, item) => { 
      container[item.id] = item; 
      return container;
    }, {} );
    console.log( result[1] );
    console.log( result[2] );
    console.log( result );

需要注意的重要一点是,对于数组,您在位置 0 处有一个未定义的值,而对象版本没有它。使用对象版本而不是数组更有意义。正如 cmets 中所提到的,在您的阵列中存在间隙并不是一个好主意。

【讨论】:

    猜你喜欢
    • 2016-12-13
    • 1970-01-01
    • 2020-01-18
    • 2023-01-14
    • 1970-01-01
    • 1970-01-01
    • 2020-09-14
    • 2020-11-09
    • 1970-01-01
    相关资源
    最近更新 更多