Как да замените обект A на B в масив, ако обект A получи същото свойство в обект B

Опитвам се да получа масив от два различни масива. Не съм сигурен как да го направя с 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 },
];

Благодаря


person Snow Bases    schedule 20.01.2020    source източник


Отговори (2)


Възможно е да се използва метод map. Освен това можете да използвате Map колекция, за да имате O(1) достъп до елементи елементи, когато map вашия масив:

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)

person StepUp    schedule 20.01.2020

За такива изисквания комбинирането или сливането на 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
  }
]

*/
  
  

person Arun Saini    schedule 20.01.2020