【问题标题】:How to map key and value pair to each index in object如何将键值对映射到对象中的每个索引
【发布时间】:2020-04-06 11:32:05
【问题描述】:

我正在尝试使用 map 向我的对象添加一个新的键和值对。该值只是一个空数组,以便我以后可以将对象推入其中。

这是我的代码:

let columns = [
    {
        _id: "5e8af4591c9d440000a1a4ed",
        column_name: "Opportunities",
        column_value: 0,
        column_percentage: 0.25
    },
    {
        _id: "5e8af4a81c9d440000a1a4ee",
        column_name: "Prospects",
        column_value: 0,
        column_percentage: 0.5
    }
];

let output = columns.map(() => ({posts: []}));

console.log(output)

这是我希望我的对象在映射后的样子:

let columns = [
    {
        _id: "5e8af4591c9d440000a1a4ed",
        column_name: "Opportunities",
        column_value: 0,
        column_percentage: 0.25,
        posts: []
    },
    {
        _id: "5e8af4a81c9d440000a1a4ee",
        column_name: "Prospects",
        column_value: 0,
        column_percentage: 0.5,
        posts: []
    }
];

但是当前的输出是:

[
    {
        posts: []
    },
    {
        posts: []
    }
]

【问题讨论】:

  • columns.map((el) => { return {...el, posts: []} });
  • Array map 返回一个新数组,它不会修改现有数组。因此,虽然到目前为止所有其他答案都很好,但请记住,您可能想要的是new_columns = columns.map(lambda)
  • @ShapeOfMatter 谢谢我想知道为什么没有一个答案有效

标签: javascript arrays object


【解决方案1】:

您的代码不起作用,因为新数组将包含映射器函数返回的内容。

即使它与原始数组的内容无关,它也会保持其返回值不变。

所以,如果你返回一个对象{posts:[]},它将是输出。

您必须将该对象合并到映射器函数内的当前数组元素中。


您可以使用对象扩展语法来合并两个对象:

let columns = [
    {
        _id: "5e8af4591c9d440000a1a4ed",
        column_name: "Opportunities",
        column_value: 0,
        column_percentage: 0.25
    },
    {
        _id: "5e8af4a81c9d440000a1a4ee",
        column_name: "Prospects",
        column_value: 0,
        column_percentage: 0.5
    }
];

columns.map(obj => ({...obj, posts: []}));

不过,这是一个相对较新的功能,所以,如果您需要更大的支持,可以使用Object.assign

let columns = [
    {
        _id: "5e8af4591c9d440000a1a4ed",
        column_name: "Opportunities",
        column_value: 0,
        column_percentage: 0.25
    },
    {
        _id: "5e8af4a81c9d440000a1a4ee",
        column_name: "Prospects",
        column_value: 0,
        column_percentage: 0.5
    }
];

columns.map(obj => Object.assign({posts: []}, obj));

【讨论】:

    【解决方案2】:

    你可以试试:

    let newColumns = columns.map((item) => Object.assign({}, item, {posts: []});  
    console.log(newColumns);
    

    【讨论】:

      【解决方案3】:

      使用forEach()

      columns.forEach(el => el.posts=[] )
      

      let columns = [
          {
              _id: "5e8af4591c9d440000a1a4ed",
              column_name: "Opportunities",
              column_value: 0,
              column_percentage: 0.25
          },
          {
              _id: "5e8af4a81c9d440000a1a4ee",
              column_name: "Prospects",
              column_value: 0,
              column_percentage: 0.5
          }
      ];
      columns.forEach(el => el.posts=[] )
      
      console.log(columns)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-26
        • 1970-01-01
        • 1970-01-01
        • 2012-01-11
        • 1970-01-01
        • 2023-02-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多