0

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)
);
7
  • Please update your question to include the code you have already tried and any specific questions about that code that's not working for you. Commented Nov 30, 2020 at 14:46
  • i think it's so messed up my code isn't understandable at all it's really hard and complicated and all wrong so i'm trying to get the professionnal to avoid having all these mess Commented Nov 30, 2020 at 14:50
  • You were given an answer at stackoverflow.com/questions/65062973/…. Can you build on that solution? Commented Nov 30, 2020 at 14:54
  • Yeah i wanna some other kind of formating that wasn't what they want at work at all i want it to be like the one in this article Commented Nov 30, 2020 at 14:55
  • 1
    Because you have an answer Sergio pointed out, it's hard to want to give you a direct answer to this. What concepts did you misunderstand in the other question that you are struggling with to resolve this? Commented Nov 30, 2020 at 14:57

3 Answers 3

1

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

Sign up to request clarification or add additional context in comments.

2 Comments

Yeah MAN... Yeeeeaaaaah Man this is the bigStack Community mate Cheers 🥂
So cool naming and really gorgeous code I love thaaat...
1

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,
              });
            }
          }
        }
        
      }

3 Comments

Yeah i'll try this one immediately thank you so much
Yeah man thank you thank you thank you amazingly amazing snippet fo code buddy it works quite fine 🚀
@MansouriAla I'm glad I was able to help.
0

Read up about this package it will make your life easier: use of _map - Lodash

1 Comment

thanks but it's not what i wanna unfortunately

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.