#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)