[英]How can I transform the next object array?
I have like 1 hour trying to do the next exercice, so I get looked and I was wondering If someone can help me with this.我有大约 1 小时的时间尝试做下一个练习,所以我被看了看,我想知道是否有人可以帮助我。
Here is the array that I get from the Database Base Array Image这是我从 Database Base Array Image 中得到的数组
let response =
[{
"name": "October : 2019",
"userName": "Katherine Diaz",
"newCases": 875,
"recover": 8
},
{
"name": "December : 2019",
"userName": "Katherine Diaz",
"newCases": 503,
"recover": 38
},
{
"name": "November : 2019",
"userName": "Katherine Diaz",
"newCases": 227,
"recover": 14
},
{
"name": "November : 2019",
"userName": "Belyini Cabral",
"newCases": 19,
"recover": 14
},
{
"name": "January : 2020",
"userName": "Katherine Diaz",
"newCases": 272,
"recover": 123
},
{
"name": "October : 2019",
"userName": "Belyini Cabral",
"newCases": 287,
"recover": 1
},
{
"name": "October : 2019",
"userName": "N/A",
"newCases": 3,
"recover": 0
},
{
"name": "January : 2020",
"userName": "Mercedes Perez",
"newCases": 65,
"recover": 0
},
{
"name": "February : 2020",
"userName": "N/A",
"newCases": 76,
"recover": 0
},
{
"name": "December : 2019",
"userName": "N/A",
"newCases": 136,
"recover": 0
},
{
"name": "November : 2019",
"userName": "Mercedes Perez",
"newCases": 15,
"recover": 0
},
{
"name": "January : 2020",
"userName": "N/A",
"newCases": 299,
"recover": 0
},
{
"name": "December : 2019",
"userName": "Mercedes Perez",
"newCases": 44,
"recover": 0
},
{
"name": "October : 2019",
"userName": "Mercedes Perez",
"newCases": 323,
"recover": 0
},
{
"name": "December : 2019",
"userName": "Belyini Cabral",
"newCases": 0,
"recover": 11
},
{
"name": "January : 2020",
"userName": "Belyini Cabral",
"newCases": 0,
"recover": 11
},
{
"name": "February : 2020",
"userName": "Mercedes Perez",
"newCases": 0,
"recover": 20
},
{
"name": "February : 2020",
"userName": "Belyini Cabral",
"newCases": 0,
"recover": 9
},
{
"name": "February : 2020",
"userName": "Katherine Diaz",
"newCases": 0,
"recover": 43
}
]
I would like to have like this... I have some (Math.round...) functions just to generate random data to test with a dashboard that I want to fill.我想要这样...我有一些 (Math.round...) 函数只是为了生成随机数据以使用我想要填充的仪表板进行测试。
let premiere = [
{
name : 'October',
user : ['Katherine Diaz', 'Belyini Cabral', 'Mercedes Perez', 'N/A'],
newCases : [
Math.round(Math.random()*1000),
Math.round(Math.random()*1000),
Math.round(Math.random()*1000),
Math.round(Math.random()*1000)
],
recovered :[
Math.round(Math.random()*800),
Math.round(Math.random()*800),
Math.round(Math.random()*800),
Math.round(Math.random()*800)
],
monthRecovered : Math.round(Math.random()*800),
monthNewCases : Math.round(Math.random()*1000)
},
{
name : 'November',
user : ['Katherine Diaz', 'Belyini Cabral', 'Mercedes Perez', 'N/A'],
newCases : [
Math.round(Math.random()*1000),
Math.round(Math.random()*1000),
Math.round(Math.random()*1000),
Math.round(Math.random()*1000)
],
recovered :[
Math.round(Math.random()*800),
Math.round(Math.random()*800),
Math.round(Math.random()*800),
Math.round(Math.random()*800)
],
monthRecovered : Math.round(Math.random()*800),
monthNewCases : Math.round(Math.random()*1000)
},
{
name : 'December',
user : ['Katherine Diaz', 'Belyini Cabral', 'Mercedes Perez', 'N/A'],
newCases : [
Math.round(Math.random()*1000),
Math.round(Math.random()*1000),
Math.round(Math.random()*1000),
Math.round(Math.random()*1000)
],
recovered :[
Math.round(Math.random()*800),
Math.round(Math.random()*800),
Math.round(Math.random()*800),
Math.round(Math.random()*800)
],
monthRecovered : Math.round(Math.random()*800),
monthNewCases : Math.round(Math.random()*1000)
},
{
name : 'January',
user : ['Katherine Diaz', 'Belyini Cabral', 'Mercedes Perez', 'N/A'],
newCases : [
Math.round(Math.random()*1000),
Math.round(Math.random()*1000),
Math.round(Math.random()*1000),
Math.round(Math.random()*1000)
],
recovered :[
Math.round(Math.random()*800),
Math.round(Math.random()*800),
Math.round(Math.random()*800),
Math.round(Math.random()*800)
],
monthRecovered : Math.round(Math.random()*800),
monthNewCases : Math.round(Math.random()*1000)
},
{
name : 'February',
user : ['Katherine Diaz', 'Belyini Cabral', 'Mercedes Perez', 'N/A'],
newCases : [
Math.round(Math.random()*1000),
Math.round(Math.random()*1000),
Math.round(Math.random()*1000),
Math.round(Math.random()*1000)
],
recovered :[
Math.round(Math.random()*800),
Math.round(Math.random()*800),
Math.round(Math.random()*800),
Math.round(Math.random()*800)
],
monthRecovered : Math.round(Math.random()*800),
monthNewCases : Math.round(Math.random()*1000)
}
];
As I see It, it's a little be advanced for me, I think I need more knowledge of data structures in this language, don't need to tell me the whole solution just where to start and some steps.在我看来,它对我来说有点高级,我认为我需要更多关于这种语言的数据结构的知识,不需要告诉我整个解决方案从哪里开始和一些步骤。
You could take an object for grouping and get the values from it as array of objects.您可以使用一个对象进行分组,并从中获取作为对象数组的值。
var response = [{ name: "October : 2019", userName: "Katherine Diaz", newCases: 875, recover: 8 }, { name: "December : 2019", userName: "Katherine Diaz", newCases: 503, recover: 38 }, { name: "November : 2019", userName: "Katherine Diaz", newCases: 227, recover: 14 }, { name: "November : 2019", userName: "Belyini Cabral", newCases: 19, recover: 14 }, { name: "January : 2020", userName: "Katherine Diaz", newCases: 272, recover: 123 }, { name: "October : 2019", userName: "Belyini Cabral", newCases: 287, recover: 1 }, { name: "October : 2019", userName: "N/A", newCases: 3, recover: 0 }, { name: "January : 2020", userName: "Mercedes Perez", newCases: 65, recover: 0 }, { name: "February : 2020", userName: "N/A", newCases: 76, recover: 0 }, { name: "December : 2019", userName: "N/A", newCases: 136, recover: 0 }, { name: "November : 2019", userName: "Mercedes Perez", newCases: 15, recover: 0 }, { name: "January : 2020", userName: "N/A", newCases: 299, recover: 0 }, { name: "December : 2019", userName: "Mercedes Perez", newCases: 44, recover: 0 }, { name: "October : 2019", userName: "Mercedes Perez", newCases: 323, recover: 0 }, { name: "December : 2019", userName: "Belyini Cabral", newCases: 0, recover: 11 }, { name: "January : 2020", userName: "Belyini Cabral", newCases: 0, recover: 11 }, { name: "February : 2020", userName: "Mercedes Perez", newCases: 0, recover: 20 }, { name: "February : 2020", userName: "Belyini Cabral", newCases: 0, recover: 9 }, { name: "February : 2020", userName: "Katherine Diaz", newCases: 0, recover: 43 }], result = Object.values(response.reduce((object, { name, userName, newCases, recover }) => { if (!object[name]) object[name] = { name, user: [], newCases: [], recovered: [] }; object[name].user.push(userName); object[name].newCases.push(newCases); object[name].recovered.push(recover); return object; }, {})); console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
You have to iterate through response
and fill premiere
with the data.您必须遍历
response
并用数据填充premiere
。
var response=... (same as in OP),
premiere=[],
keys={};
for(var i=0;i<response.length;i++) {
var element=response[i];
//Here you may parse element.name if you want to remove the year
var name=element.name;
//You'll need to keep track of where in premiere is each name
var index;
if(!keys.hasOwnProperty(name)) {
//If name doesn't exist, create it (we'll populate it later)
index=premiere.push({
name:name,
user:[],
newCases:[],
recovered:[],
monthNewCases:0,
monthRecovered:0
})-1;
//And store its index in keys
keys[name]=index;
} else {
//If it exists, retreive its index to append new data
index=keys[name];
}
//Check if the user name exists to prevent duplicates
//If it doesn't, push it
if(premiere[name].user.indexOf(element.userName)<0) premiere[name].user.push(element.userName);
premiere[name].newCases.push(element.newCases);
premiere[name].recovered.push(element.recover);
premiere[name].monthNewCases+=element.newCases;
premiere[name].monthRecovered+=element.recover;
}
Not tested.未测试。
Look at Array.reduce to iterate over the response and build up a new array:查看Array.reduce以迭代响应并构建一个新数组:
const response = [ { "name": "October : 2019", "userName": "Katherine Diaz", "newCases": 875, "recover": 8 }, { "name": "December : 2019", "userName": "A guy named Jeff", "newCases": 503, "recover": 380 }, { "name": "December : 2019", "userName": "Patient Zero", "newCases": 999, "recover": 38 }, ]; const result = response.reduce((acc, item) => { // create a new entry for this item's name if it doesn't already exist const bin = acc[item.name] = acc[item.name] || { user: [], newCases: [], recovered: [] }; // add the fields we care about to this entry bin.user.push(item.userName); bin.newCases.push(item.newCases); bin.recovered.push(item.recover); // return the updated accumulator for the next iteration return acc; }, {}) document.getElementById('output').innerText = JSON.stringify(result, null, 2);
<pre id="output"></pre>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.