Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

85
Views
Return last value with recursion - Javascript

Hi all I have following data:

const section = {
  fileds: [
    { id: "some Id-1", type: "user-1" },
     {
      child: [
        { id: "some Id-2", type: "user-2" },
        { fileds: [{ id: "kxf5", status: "pending" }] },
        { fileds: [{ id: "ed5t", status: "done" }] }
      ]
    },
    {
      child: [
        { id: "some Id-3", type: "teacher" },
        { fileds: [{ id: "ccfr", status: null }] },
        { fileds: [{ id: "kdpt8", status: "inProgress" }] }
      ]
    }
  ]
};

and following code:


const getLastIds = (arr) =>
  arr.flatMap((obj) => {
    const arrayArrs = Object.values(obj).filter((v) => Array.isArray(v));
    const arrayVals = Object.entries(obj)
      .filter(([k, v]) => typeof v === "string" && k === "id")
      .map(([k, v]) => v);
    return [...arrayVals, ...arrayArrs.flatMap((arr) => getLastIds(arr))];
  });

console.log(getLastIds(section.fileds));

// output is (7) ["some Id-1", "some Id-2", "kxf5", "ed5t", "some Id-3", "ccfr", "kdpt8"]

My code doing following, it printing in new array all ids.

It's working but I don't need all ids.

I need to return only last id in array and I should use recursion. The output should be

(4) [" "kxf5", "ed5t", "ccfr", "kdpt8"]

P.S. here is my code in codesandbox

Is there a way to solve this problem with recursion? Please help to fix this.

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

You can do it with reduce.

function getLastIds (value) {
    return value.reduce((prev, cur) => {
        if (cur.id) {
            return [ ...prev, cur.id ];
        } else {
            let key = ('child' in cur) ? 'child' : 'fileds';
            return [ ...prev, ...getLastIds (cur[key]) ]
        }
    }, []);
}
about 4 years ago · Juan Pablo Isaza Report

0

You could check if a certain key exists and take this property for mapping id if status exists.

const
    getValues = data => {
        const array = Object.values(data).find(Array.isArray);
        return array
            ? array.flatMap(getValues)
            : 'status' in data ? data.id : [];
    },
    section = { fileds: [{ id: "some Id-1", type: "user-1" }, { child: [{ id: "some Id-2", type: "user-2" }, { fileds: [{ id: "kxf5", status: "pending" }] }, { fileds: [{ id: "ed5t", status: "done" }] }] }, { child: [{ id: "some Id-3", type: "teacher" }, { fileds: [{ id: "ccfr", status: null }] }, { fileds: [{ id: "kdpt8", status: "inProgress" }] }] }] },
    result = getValues(section);

console.log(result);

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!