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

#javascript #arrays #merge

#javascript #массивы #слияние

Вопрос:

у меня есть 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)) amp;amp; p
  , {});

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

console.log(final)
 

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

https://jsfiddle.net/q0wn2vuo/

Я хочу, чтобы результат выглядел следующим образом:

[{ дата: «2010-01-01», название: ‘a,aa’, }, { дата: «2010-02-01», название: ‘b’, }, { дата: «2010-03-01», цена: ‘c’, }]

Комментарии:

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

2. извините, «30,45» — это тот результат, который я хочу

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

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

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

Ответ №1:

Вот, пожалуйста.

 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.log(resultArr) 

Ответ №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"
   },  
]


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.log(final)