Json парсинг
Есть json файл (длина изначально не известна):
var data = [
{
"type":1,
"date":"2018-01-17 11:00:00",
"name":"Petrov"
},
{
"type":1,
"date":"2018-01-17 12:00:00",
"name":"Ivanov"
},
{
"type":2,
"date":"2018-01-17 11:00:00",
"name":"Vasiliev"
},
{
"type":2,
"date":"2018-01-17 12:00:00",
"name":"Zaycev"
}....
+ есть json из значений (количество значений равно количеству типов):
{
"value":1
},
{
"value":2
}
Нужно составить массив из значений для типа = 1, типа = 2 через запятую и т.д. (всего 15 типов, но какие из 15 будут неизвестно!) + дополнить значением, т.е. вот что должно получиться на выходе. -- для типа 1 var new_par_1 = [ names: ["Petrov", "Ivanov"] , dates: ["2018-01-17 11:00:00", "2018-01-17 12:00:00"], values: 1 ] , //ввод разделяителя -- для типа 2 var new_par_2 = [ names: ["Vasiliev", "Zaycev"] , dates: ["2018-01-17 11:00:00", "2018-01-17 12:00:00"], values: 2 ] |
let data = [
{
"type": 1,
"date": "2018-01-17 11:00:00",
"name": "Petrov"
},
{
"type": 1,
"date": "2018-01-17 12:00:00",
"name": "Ivanov"
},
{
"type": 2,
"date": "2018-01-17 11:00:00",
"name": "Vasiliev"
},
{
"type": 2,
"date": "2018-01-17 12:00:00",
"name": "Zaycev"
}
]
let result = data.reduce((p, c, i, a) => {
!p[c.type] && (p[c.type] = {
names: [],
dates: [],
values: 0
})
p[c.type].names.push(c.name)
p[c.type].dates.push(c.date)
p[c.type].values++
return p
}, {})
// перебрать
Object.entries(result).forEach(([key, value]) => console.log(key, value))
и var new_par_1 = [ names: ["Petrov", "Ivanov"]... Так не может быть, те, в массиве не может быть key:value, может быть только value |
Спасибо, но вы value считаете. А я привел json файл из value, и надо по type проверку делать чтоб присвоить нужный ....
|
) какой вопрос, такой ответ...
let data = [
{
"type": 1,
"date": "2018-01-17 11:00:00",
"name": "Petrov"
},
{
"type": 1,
"date": "2018-01-17 12:00:00",
"name": "Ivanov"
},
{
"type": 2,
"date": "2018-01-17 11:00:00",
"name": "Vasiliev"
},
{
"type": 2,
"date": "2018-01-17 12:00:00",
"name": "Zaycev"
}
]
let values = [
{
value: 1,
},
{
value: 2,
}
]
let result = data.reduce((p, c, i, a) => {
!p[c.type] && (p[c.type] = {
names: [],
dates: [],
values: 0
})
p[c.type].names.push(c.name)
p[c.type].dates.push(c.date)
return p
}, {})
// перебрать
Object.entries(result).forEach(([key, value], i) => result[key].values = values[i] ? values[i].value : null)
console.log(result)
уже отсюда видно, такой подход будет вызывать анальные муки :D |
Классно, сработало, теперь все же как сформировать набор var-ов, нужно для графика на самом деле..
let data = [
{
"type": 1,
"date": "2018-01-17 11:00:00",
"name": "Petrov"
},
{
"type": 1,
"date": "2018-01-17 12:00:00",
"name": "Ivanov"
},
{
"type": 2,
"date": "2018-01-17 11:00:00",
"name": "Vasiliev"
},
{
"type": 2,
"date": "2018-01-17 12:00:00",
"name": "Zaycev"
}
]
let values = [
{
value: 1,
},
{
value: 2,
}
]
let result = data.reduce((p, c, i, a) => {
!p[c.type] && (p[c.type] = {
labels : [],
datasets : [
{
fillColor : "rgba(220,220,220,0.5)",
strokeColor : 0,
pointColor : 0,
pointStrokeColor : "#fff",
data : [],
title : "описание"
}
]
})
p[c.type].labels.push(c.name)
p[c.type].data.push(c.date)
return p
}, {})
// перебрать
Object.entries(result).forEach(([key, value], i) => result[key].pointColor = values[i] ? values[i].value : null)
console.log(result)
Таким образом нужно сформировать пары х/y разделенные через запятую и блок let должен быть отличающийся по названию |
зачем кучу варов? если есть объект, ну и передавай вместо варов куски объекта, например, result[1], result[2]...
подожду переводчика... |
Разобрался, спасибо большое!
|
| Часовой пояс GMT +3, время: 14:44. |