0

i have an array that represents position inside nested array

const level = [2,1,0];

and nested array

const array = [

    [1,2,3,4],
    [22,33,444],
    [[7],[8],[9]]
    ];

i want to get element which position is represented in a level array, manually i would get it this way:

array[2][1][0]

but i need to write a function that itterates over level array which can be any length and returns element from this position, i've tried to use es6 reduce for this purpose but didn't succed can some1 help me with this issue, what am i doing wrong?

level.reduce((prev,curr) => {
  return prev[curr];
}, level[0]);

desired result: for level = [0,0] get value 1 for level = [2,1,0] get value 8

3
  • 2
    You starting value should probably be array, not level[0], right? Since that's what you're starting from and narrowing down? Commented Oct 7, 2021 at 18:32
  • @DemiPixel ty my bad Commented Oct 7, 2021 at 18:35
  • lodash.com/docs/#get Commented Oct 7, 2021 at 18:36

1 Answer 1

1

You can do that by using destructuring assignment and recursion:

const level = [2, 1, 0];

const array = [
  [1, 2, 3, 4],
  [22, 33, 444],
  [[7], [8], [9]],
];

const find = ([index, ...rest], { [index]: value }) =>
  rest.length ? find(rest, value) : value;

const result = find(level, array);

console.log(result);

Note that also works with composite trees with objects and arrays:

const level = ['prop', 1, 'otherProp', 1];

const tree = {
  prop: [
    {},
    { otherProp: [2, 4, 6] }
  ]
};

const find = ([index, ...rest], { [index]: value }) =>
  rest.length ? find(rest, value) : value;

const result = find(level, tree);

console.log(result);

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

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.