Неправильная печать массива при уменьшении

у меня есть 1 массив javascript. я хотел объединить этот массив на основе дат, получить каждую цену и ввести в поле. Однако цена, которую я получаю, равна 1. Другая цена с той же датой не печатается. Может ли кто-нибудь помочь мне, почему? Спасибо

Вот код:

Javascript:

var data = [
   {
      "date":"2010-01-01",
      "name":"a"
   },
   {
      "date":"2010-02-01",
      "name":"b"
   },
   {
      "date":"2010-03-01",
      "name":"c"
   },
   {
      "date":"2010-01-01",
      "name":"aa"
   },
   
]

var result1 = data.reduce((p, c) => 
  (p[c.date] = Object.assign({},{name: null}, p[c.date], c)) && p
  , {});

var final = Object.keys(result1).map(x=>result1[x])

console.info(final)

Вы можете получить доступ к коду здесь:

https://jsfiddle.net/q0wn2vuo/

Я хочу, чтобы вывод был таким:

[{ дата: "2010-01-01", имя: 'а, аа', }, { дата: "2010-02-01", имя: 'б', }, { дата: "2010-03-01", цена: 'с', }]

Что вы имеете в виду под price: 30 45? Это недопустимый синтаксис, вы хотите [30, 45] или '30 45' или что-то в этом роде?

CertainPerformance 11.12.2020 07:24

извините '30,45' это результат, который я хочу

TechDev 11.12.2020 07:26

Итак, вам нужны строки, когда цены объединяются, а числа в противном случае? (звучит немного странно)

CertainPerformance 11.12.2020 07:27

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

TechDev 11.12.2020 07:29

я уже редактирую свой пост. очень жаль

TechDev 11.12.2020 07:31
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
54
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Ну вот.

var data = [
   {
  "date":"2010-01-01",
  "name":"a"
   },
   {
  "date":"2010-02-01",
  "name":"b"
   },
   {
  "date":"2010-03-01",
  "name":"c"
   },
   {
  "date":"2010-01-01",
  "name":"aa"
   },
   
]

const resultSet = {};

 for (let i = 0, _len = data.length; i < _len; i++ ) {
       if (resultSet[data[i].date]){
        resultSet[data[i].date] += ","+data[i].name
       }
       else{
        resultSet[data[i].date] = data[i].name
       }
       
    }

const resultArr = Object.entries(resultSet).map(([key,value])=>{
 return { date: key, name: value }
})
console.info(resultArr)

пытаться:

var data = [
   {
      "date":"2010-01-01",
      "name":"a"
   },
   {
      "date":"2010-02-01",
      "name":"b"
   },
   {
      "date":"2010-03-01",
      "name":"c"
   },
   {
      "date":"2010-01-01",
      "name":"aa"
   },  
]


var result1 = data.reduce((accum, curr) => {
  if (!accum[curr.date]) {
    return {...accum, [curr.date]: [curr.name] }
  }
  return {...accum, [curr.date]: [...accum[curr.date], curr.name] }
}, {})

var final = Object.keys(result1).map(date => ({
  date: date,
  name: result1[date].join(',')
}))

console.info(final)

Другие вопросы по теме