1

I need to create an array that contains all the visits values if the date is the same without creating duplicate date arrays

const MOCK = {
        data: [
          {date: "Aug.03", name: "Nihal Pandit", visits: 3 },
          {date: "Aug.03", name: "Anthony Elias", visits: 3 },
          {date: "Aug.04", name: "Alex P.", visits: 2 },
          {date: "Aug.05", name: "Alex P.", visits: 3 },
          {date: "Aug.05", name: "Anthony Elias", visits: 3 },
        ]
     }

But im not sure of a method that lets you compare the values from one iteration to another when looping over an array. I think Array.reduce() might work, but I dont understand how to properly use reduce at this point.

I am looking for a result that looks like:

[["Aug.03", 3, 3], ["Aug.04",2],["Aug.05", 2, 3]

So I need an array for each date (the array should contain that date) and all the visit values from every object that contains that date.

let newArray = []
let visitCountValues = MOCK?.data?.map((item, idx)=> {
        let value = Object.values(item);
      if(value[0] === value[0]){
        newArray.push([value[0], value[1])
      }
        
      }) 
1
  • 3
    Could you share the expected result and your try on the solution as well? Commented Aug 18, 2022 at 14:35

2 Answers 2

2

You can use reduce to group the array on one objectwithdateas property, andObject.valuesto get themapped` arrays.

const MOCK = {
        data: [
          {date: "Aug.03", name: "Nihal Pandit", visits: 3 },
          {date: "Aug.03", name: "Anthony Elias", visits: 3 },
          {date: "Aug.04", name: "Alex P.", visits: 2 },
          {date: "Aug.05", name: "Alex P.", visits: 3 },
          {date: "Aug.05", name: "Anthony Elias", visits: 3 },
        ]
     }
     
const dateGroups = Object.values(MOCK.data.reduce((acc, { date, visits }) => ({
  ...acc,
  [date]: [...(acc[date] || [date]), visits]
}), {}))

console.log(dateGroups)

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

Comments

2

after you update you question I understood better you can do something like this

const visits = [
      {date: "Aug.03", name: "Nihal Pandit", visits: 3 },
      {date: "Aug.03", name: "Anthony Elias", visits: 3 },
      {date: "Aug.04", name: "Alex P.", visits: 2 },
      {date: "Aug.05", name: "Alex P.", visits: 3 },
      {date: "Aug.05", name: "Anthony Elias", visits: 3 },
    ]
    
const result = Object.values(visits.reduce((res, {date, visits}) =>{
   const existing = res[date] || [date]
   res[date] = [...existing, visits]
   return res
}, {}))

console.log(result)

Comments

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.