【问题标题】:How to replace object A to B in an arrays if the object A got same property in object B [duplicate]如果对象A在对象B中具有相同的属性,如何将数组中的对象A替换为B [重复]
【发布时间】:2020-01-20 09:47:34
【问题描述】:

我正在尝试从两个不同的数组中获取一个数组。我不确定如何使用 ES6 来实现。

我希望 current_year_data 替换为 previous_year_data

第一个数组是:

let previous_year_data = [
  { month: "January", value: 300 },
  { month: "February", value: 1 },
  { month: "March", value: 2 },
  { month: "April", value: 3 },
  { month: "May", value: 4 },
  { month: "Jun", value: 5 },
  { month: "July", value: 6 },
  { month: "August", value: 7 },
  { month: "September", value: 8 },
  { month: "October", value: 9 },
  { month: "November", value: 10 },
  { month: "December", value: 11 },
];

第二个数组:

let current_year_data = [
  { month: "January", value: 4459 }
];

结果应该在:

let current_year_data = [
  { month: "January", value: 4459 },
  { month: "February", value: 1 },
  { month: "March", value: 2 },
  { month: "April", value: 3 },
  { month: "May", value: 4 },
  { month: "Jun", value: 5 },
  { month: "July", value: 6 },
  { month: "August", value: 7 },
  { month: "September", value: 8 },
  { month: "October", value: 9 },
  { month: "November", value: 10 },
  { month: "December", value: 11 },
];

谢谢

【问题讨论】:

    标签: javascript arrays ecmascript-6


    【解决方案1】:

    可以使用map 方法。另外,当你map你的数组时,你可以使用Map集合让O(1)访问元素项:

    let unique = new Map(current_year_data.map(s=> [s.month, s.value]))
    previous_year_data.map(({month, value})=> ({month, value: unique.get(month) || value }));
    

    一个例子:

    let previous_year_data = [
      { month: "January", value: 300 },
      { month: "February", value: 1 },
      { month: "March", value: 2 },
      { month: "April", value: 3 },
      { month: "May", value: 4 },
      { month: "Jun", value: 5 },
      { month: "July", value: 6 },
      { month: "August", value: 7 },
      { month: "September", value: 8 },
      { month: "October", value: 9 },
      { month: "November", value: 10 },
      { month: "December", value: 11 },
    ];
    
    let current_year_data = [
      { month: "January", value: 4459 }
    ];
    
    let unique = new Map(current_year_data.map(s=> [s.month, s.value]))
    const result = previous_year_data.map(({month, value})=> 
        ({month, value: unique.get(month) || value }));
    console.log(result)

    【讨论】:

      【解决方案2】:

      对于此类要求,组合或合并键唯一的 JSON 数组将起作用!请参阅以下内容:

      // 注意:这将选择列表中最后一个重复的项目。

      const previous_year_data = [
        { month: "January", value: 300 },
        { month: "February", value: 1 },
        { month: "March", value: 2 },
        { month: "April", value: 3 },
        { month: "May", value: 4 },
        { month: "Jun", value: 5 },
        { month: "July", value: 6 },
        { month: "August", value: 7 },
        { month: "September", value: 8 },
        { month: "October", value: 9 },
        { month: "November", value: 10 },
        { month: "December", value: 11 },
      ];
      
      const current_year_data = [
        { month: "January", value: 4459 }
      ];
      
      const key = 'month'; //Replace this key with unique key
      
      const result = [...new Map([...previous_year_data, ...current_year_data].map(item =>
        [item[key], item])).values()];
        
      console.log(result);
      
      /*OUTPUT
      
      [
        {
          "month": "January",
          "value": 4459
        },
        {
          "month": "February",
          "value": 1
        },
        {
          "month": "March",
          "value": 2
        },
        {
          "month": "April",
          "value": 3
        },
        {
          "month": "May",
          "value": 4
        },
        {
          "month": "Jun",
          "value": 5
        },
        {
          "month": "July",
          "value": 6
        },
        {
          "month": "August",
          "value": 7
        },
        {
          "month": "September",
          "value": 8
        },
        {
          "month": "October",
          "value": 9
        },
        {
          "month": "November",
          "value": 10
        },
        {
          "month": "December",
          "value": 11
        }
      ]
      
      */
        
        

      【讨论】:

        最近更新 更多