【问题标题】:How to map array of values to an array of objects [duplicate]如何将值数组映射到对象数组[重复]
【发布时间】:2019-08-25 23:29:11
【问题描述】:

我想将以下数组转换为对象数组:

let arr = ['tree', 'apple', 'orange']

arr = [
  {value: tree},
  {value: apple},
  {value: orange}
]

到目前为止我的解决方案是:

let temp = []; 
arr.forEach(x => {   
   temp.push({value: p}); 
});

arr = temp

如何使用 array.map() 功能解决这个问题,以便我可以调用

arr.map()...

【问题讨论】:

  • arr.map(value => ({value}))
  • arr.map(o => ({value: o}))?

标签: javascript arrays


【解决方案1】:

你可以用Array.prototype.map()来做这样的事情:

const arr = ['tree', 'apple', 'orange'];

const result = arr.map(value => ({ value }));

console.log(result);

或者更明确地说,没有隐式返回或对象简写:

const arr = ['tree', 'apple', 'orange'];

const result = arr.map(x => {
  return { value: x };
});

console.log(result);

【讨论】:

    【解决方案2】:

    您从 .map 回调返回的将是数组中该索引处的新项目 - 因此,只需将您的 temp.push( 替换为 return

    let arr = ['tree', 'apple', 'orange'];
    arr = arr.map(x => {
      return { value: x };
    });
    console.log(arr);

    或者,为了更简洁,从箭头函数隐式返回:

    let arr = ['tree', 'apple', 'orange'];
    arr = arr.map(x => ({ value: x }));
    console.log(arr);

    (为了代码清晰,您可能会考虑覆盖arr - 如果可以的话,分配给新的变量名,这样arr 可以是const

    【讨论】:

    • 有没有办法不用赋值直接操作数组?
    • 您可以重新分配每个索引:arr[i] = ({ value: arr[i] }),但在不必要时最好避免重新分配和变异
    【解决方案3】:
    arr.map(p => 
     {   
       return {value: p}; 
     })
    

    【讨论】:

    • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。
    【解决方案4】:

    地图是纯粹的,它不会改变你的目标或父数组。 Map 创建它自己的数组副本并通过对复制的数组进行操作返回结果。

    let arr = ['tree', 'apple', 'orange'];
     
    console.log(arr.map(x => ({ value: x })));

    【讨论】:

      【解决方案5】:

      map() 方法创建一个新数组,其结果是在调用数组中的每个元素上调用提供的函数。

      您可以在arr 上使用它来获取更新的数组:

      let arr = ['tree', 'apple', 'orange'];
      let arrOfObjects = arr.map( el => { return { value: el } })
      
      console.log(arrOfObjects);

      【讨论】:

      • 请描述您更改了什么以及原因,以帮助其他人识别问题并理解此答案!
      猜你喜欢
      • 1970-01-01
      • 2020-07-22
      • 1970-01-01
      • 2015-06-25
      • 2021-04-20
      • 1970-01-01
      • 1970-01-01
      • 2021-04-18
      • 1970-01-01
      相关资源
      最近更新 更多