NodeJS, объединяющий два данных с вложенными ключами

#arrays #array-merge

Вопрос:

Я пытаюсь объединить свои данные с ключами, но возникла странная ситуация.

Данные:1

 "qrCode": {
            "2021-10-03": 0,
            "2021-10-04": 0,
            "2021-10-05": 0,
            "2021-10-06": "2",
            "2021-10-07": 0,
            "2021-10-08": "1",
            "2021-10-09": "1"
        },
        "gallery": {
            "2021-10-03": 0,
            "2021-10-04": 0,
            "2021-10-05": 0,
            "2021-10-06": "2",
            "2021-10-07": 0,
            "2021-10-08": "1",
            "2021-10-09": "1"
        },
        "Whatsapp": {
            "2021-10-03": 0,
            "2021-10-04": 0,
            "2021-10-05": 0,
            "2021-10-06": "2",
            "2021-10-07": 0,
            "2021-10-08": "1",
            "2021-10-09": "1"
        },
         //continues like this.
 

Данные: 2

     [
  TextRow { score: '1', date: '2021-10-09', value: '', label: 'share' },
  TextRow {
    score: '5',
    date: '2021-10-06',
    value: '',
    label: 'qrCode'
  },
  TextRow {
    score: '1',
    date: '2021-10-06',
    value: '',
    label: 'gallery'
  },
  TextRow {
    score: '1',
    date: '2021-10-06',
    value: 'https://api.whatsapp.com/send?phone= 905448514495',
    label: 'Whatsapp'
  },
  TextRow {
    score: '1',
    date: '2021-10-06',
    value: 'https://twitter.com/90pixel',
    label: 'Twitter'
  },
  TextRow {
    score: '2',
    date: '2021-10-06',
    value: 'https://trendyol.com/jump/yeni-sezon-outdoor-erkek-spor-ayakkabi-25715-navy-p-57375516?boutiqueId=556044amp;merchantId=655',
    label: 'Trendyol'
  },
  TextRow {
    score: '1',
    date: '2021-10-08',
    value: 'https://goo.gl/maps/z3RRpzp5SgxToDv18',
    label: 'Lokasyon'
  }
]
 

Я хочу объединить их с помощью одной функции, но вывод неверен. Я получаю каждый элемент одинаково по результату.

 },
        "qrCode": {
            "2021-10-03": 0,
            "2021-10-04": 0,
            "2021-10-05": 0,
            "2021-10-06": "2",
            "2021-10-07": 0,
            "2021-10-08": "1",
            "2021-10-09": "1"
        },
        "gallery": {
            "2021-10-03": 0,
            "2021-10-04": 0,
            "2021-10-05": 0,
            "2021-10-06": "2",
            "2021-10-07": 0,
            "2021-10-08": "1",
            "2021-10-09": "1"
        },
        "Whatsapp": {
            "2021-10-03": 0,
            "2021-10-04": 0,
            "2021-10-05": 0,
            "2021-10-06": "2",
            "2021-10-07": 0,
            "2021-10-08": "1",
            "2021-10-09": "1"
        },
        "Twitter": {
            "2021-10-03": 0,
            "2021-10-04": 0,
            "2021-10-05": 0,
            "2021-10-06": "2",
            "2021-10-07": 0,
            "2021-10-08": "1",
            "2021-10-09": "1"
        },
 

Я вроде как не знаю, что там не так. Вот моя функция. Он сохраняет каждый ключ и добавляет дополнительные ключи. Что мне делать ?

 data2.forEach((statistic) => {
  data1[statistic.label][statistic.date] = Number(statistic.score);
});
 

Ответ №1:

Я предполагаю, что это в JavaScript.

Я добавил скобки везде, где это необходимо

 
let data1 = {"qrCode": {
            "2021-10-03": 0,
            "2021-10-04": 0,
            "2021-10-05": 0,
            "2021-10-06": "2",
            "2021-10-07": 0,
            "2021-10-08": "1",
            "2021-10-09": "1"
        },
        "gallery": {
            "2021-10-03": 0,
            "2021-10-04": 0,
            "2021-10-05": 0,
            "2021-10-06": "2",
            "2021-10-07": 0,
            "2021-10-08": "1",
            "2021-10-09": "1"
        },
        "Whatsapp": {
            "2021-10-03": 0,
            "2021-10-04": 0,
            "2021-10-05": 0,
            "2021-10-06": "2",
            "2021-10-07": 0,
            "2021-10-08": "1",
            "2021-10-09": "1"
        }}

let data2 =  [
  {'TextRow': { score: '1', date: '2021-10-09', value: '', label: 'share' }},
  {'TextRow': {
    score: '1099',
    date: '2021-10-06',
    value: '',
    label: 'qrCode'
  }},
  {'TextRow': {
    score: '1',
    date: '2021-10-06',
    value: '',
    label: 'gallery'
  }},
  {'TextRow': {
    score: '1',
    date: '2021-10-06',
    value: 'https://api.whatsapp.com/send?phone= 905448514495',
    label: 'Whatsapp'
  }},
  {'TextRow': {
    score: '1',
    date: '2021-10-06',
    value: 'https://twitter.com/90pixel',
    label: 'Twitter'
  }},
  {'TextRow': {
    score: '2',
    date: '2021-10-06',
    value: 'https://trendyol.com/jump/yeni-sezon-outdoor-erkek-spor-ayakkabi-25715-navy-p-57375516?boutiqueId=556044amp;merchantId=655',
    label: 'Trendyol'
  }},
  {'TextRow': {
    score: '1',
    date: '2021-10-08',
    value: 'https://goo.gl/maps/z3RRpzp5SgxToDv18',
    label: 'Lokasyon'
  }}
]

data2.forEach((statistic) => {
  const statiscData = statistic['TextRow'];
  if(data1[statiscData.label])
  data1[statiscData.label][statiscData.date] = Number(statiscData.score);
});