Reputation: 345
I'm new to Arrays and objects so I was the whole day stuck at making this task I have a this JSON file or array lang (JavaScript) i was searching on StackOverflow also but can't understand them really well:
[
{ "date": "1959:01", this"1": 138.89, "2": 139.39, "3": 139.74, "4": 139.69, "5": 140.68, "6": 141.17 },
{ "date": "1959:07", "1": 141.7, "2": 141.9, "3": 141.01, "4": 140.47, "5": 140.38, "6": 139.95 },
{ "date": "1960:01", "1": 139.98, "2": 139.87, "3": 139.75, "4": 139.56, "5": 139.61, "6": 139.58 },
{ "date": "1960:07", "1": 140.18, "2": 141.31, "3": 141.18, "4": 140.92, "5": 140.86, "6": 140.69 },
{ "date": "1961:01", "1": 141.06, "2": 141.6, "3": 141.87, "4": 142.13, "5": 142.66, "6": 142.88 },
{ "date": "1961:07", "1": 142.92, "2": 143.49, "3": 143.78, "4": 144.14, "5": 144.76, "6": 145.2 },
{ "date": "1962:01", "1": 145.24, "2": 145.66, "3": 145.96, "4": 146.4, "5": 146.84, "6": 146.58 },
{ "date": "1962:07", "1": 146.46, "2": 146.57, "3": 146.3, "4": 146.71, "5": 147.29, "6": 147.82 },
{ "date": "1963:01", "1": 148.26, "2": 148.9, "3": 149.17, "4": 149.7, "5": 150.39, "6": 150.43 },
{ "date": "1963:07", "1": 151.34, "2": 151.78, "3": 151.98, "4": 152.55, "5": 153.65, "6": 153.29 },
{ "date": "1964:01", "1": 153.74, "2": 154.31, "3": 154.48, "4": 154.77, "5": 155.33, "6": 155.62 },
{ "date": "1964:07", "1": 156.8, "2": 157.82, "3": 158.75, "4": 159.24, "5": 159.96, "6": 160.3 },
{ "date": "1965:01", "1": 160.71, "2": 160.94, "3": 161.47, "4": 162.03, "5": 161.7, "6": 162.19 },
{ "date": "1965:07", "1": 163.05, "2": 163.68, "3": 164.85, "4": 165.97, "5": 166.71, "6": 167.85 },
{ "date": "1966:01", "1": 169.08, "2": 169.62, "3": 170.51, "4": 171.81, "5": 171.33, "6": 171.57 },
{ "date": "1966:07", "1": 170.31, "2": 170.81, "3": 171.97, "4": 171.16, "5": 171.38, "6": 172.03 }
]
Those are like an income for a company for a specified number of years like in the beginning 1959:01 from 1 to 6 are the first 6 months of the year and the same year 1956:07 but diff in ":07" are the values of the last 6 months (1 to 6) of same year so I wanna make the output as follows each month with it's value and year with the easiest code to understand please.
[
{
"year": 1996,
"month": 1,
"value": 88512.12
},
{
"year": 1996,
"month": 2,
"value": 71212.12
},
{
"year": 1996,
"month": 3,
"value": 1212.12
},
{
"year": 1996,
"month": 4,
"value": 754212.12
},{
"year": 1996,
"month": 5,
"value": 545221.12
}
]
Appreciate help quite a lot.
this is my code and don't think it helps it's out of the way i think i wish a new easier and more readable one (edited i think this one is more logic than the other one):
const month = {};
let i = 1
let m = 1
for (let obj of finance) {
const year = obj["date"].split(":")[0];
month[m] = obj[`${m}`]
// month = {...month}
value = month[0]
console.log('this is the value >>>>>>>>>>' + value)
formated[year] = {year ,month}
// delete formated[year]["date"];
i++
if (m < 6 ) {m++}
}
console.log(formated,"<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>", month);
fs.writeFileSync(
path.resolve(__dirname, "Try1.json"),
JSON.stringify(formated)
);
Upvotes: 0
Views: 80
Reputation: 106
If I understand your question correctly, then you could do something like this:
const financialResults = [
{ "date": "1959:01", "1": 138.89, "2": 139.39, "3": 139.74, "4": 139.69, "5": 140.68, "6": 141.17 },
{ "date": "1959:07", "1": 141.7, "2": 141.9, "3": 141.01, "4": 140.47, "5": 140.38, "6": 139.95 },
{ "date": "1960:01", "1": 139.98, "2": 139.87, "3": 139.75, "4": 139.56, "5": 139.61, "6": 139.58 },
{ "date": "1960:07", "1": 140.18, "2": 141.31, "3": 141.18, "4": 140.92, "5": 140.86, "6": 140.69 },
{ "date": "1961:01", "1": 141.06, "2": 141.6, "3": 141.87, "4": 142.13, "5": 142.66, "6": 142.88 },
{ "date": "1961:07", "1": 142.92, "2": 143.49, "3": 143.78, "4": 144.14, "5": 144.76, "6": 145.2 },
{ "date": "1962:01", "1": 145.24, "2": 145.66, "3": 145.96, "4": 146.4, "5": 146.84, "6": 146.58 },
{ "date": "1962:07", "1": 146.46, "2": 146.57, "3": 146.3, "4": 146.71, "5": 147.29, "6": 147.82 },
{ "date": "1963:01", "1": 148.26, "2": 148.9, "3": 149.17, "4": 149.7, "5": 150.39, "6": 150.43 },
{ "date": "1963:07", "1": 151.34, "2": 151.78, "3": 151.98, "4": 152.55, "5": 153.65, "6": 153.29 },
{ "date": "1964:01", "1": 153.74, "2": 154.31, "3": 154.48, "4": 154.77, "5": 155.33, "6": 155.62 },
{ "date": "1964:07", "1": 156.8, "2": 157.82, "3": 158.75, "4": 159.24, "5": 159.96, "6": 160.3 },
{ "date": "1965:01", "1": 160.71, "2": 160.94, "3": 161.47, "4": 162.03, "5": 161.7, "6": 162.19 },
{ "date": "1965:07", "1": 163.05, "2": 163.68, "3": 164.85, "4": 165.97, "5": 166.71, "6": 167.85 },
{ "date": "1966:01", "1": 169.08, "2": 169.62, "3": 170.51, "4": 171.81, "5": 171.33, "6": 171.57 },
{ "date": "1966:07", "1": 170.31, "2": 170.81, "3": 171.97, "4": 171.16, "5": 171.38, "6": 172.03 }
]
// Extract semester and year: assign 2 if entry corresponds to second semester or 1 if it corresponds to the first
// semester in the year
const extractYearAndSemester = date => ({ year: date.split(":")[0], semester: date.split(":")[1] > 6 ? 2 : 1 })
// For each entry, return an array of objects with the desired properties
// Finally, flatten the array, so you don't end up with an array of arrays
const formatResults = arr => arr.
flatMap(entry => {
const { year, semester } = extractYearAndSemester(entry.date)
let semesterResults = []
for (let key in entry) {
if (parseInt(key)) {
semesterResults.push({
year,
month: semester === 1 ? parseInt(key) : parseInt(key) + 6,
value: entry[key]
})
}
}
return semesterResults
})
console.log(formatResults(financialResults))
Upvotes: 1
Reputation: 763
try loop through data and parse property of each record as below. In the end of the outer loop you will have data with your desired format in monthData variable;
var data = [
{ "date": "1959:01", "1": 138.89, "2": 139.39, "3": 139.74, "4": 139.69, "5": 140.68, "6": 141.17 },
{ "date": "1959:07", "1": 141.7, "2": 141.9, "3": 141.01, "4": 140.47, "5": 140.38, "6": 139.95 },
];
var monthData = [];
for (let index = 0; index < data.length; index++) {
var item =data[index];
var dateArray = item.date.split(":");
var year = dateArray[0];
var baseMonth = Number(dateArray[1]);
for (var key in item) {
if (item.hasOwnProperty(key)) {
var val = item[key];
if (String(val).indexOf(":")== -1) {
monthData.push({
year:year ,
month: baseMonth-1 + Number(key),
value: val,
});
}
}
}
}
Upvotes: 1
Reputation: 21
Read up about this package it will make your life easier: use of _map - Lodash
Upvotes: 0