简体   繁体   中英

How can I find a specific value inside a nested array?

Question: I have this array that have a nested array that I want to loop to find a specific value.

arr = [['123456','234567'], ['345678']];
specificValue = '123456';

The output that I want is to find out if there's a value same with specificvalue and return this value?

I tried

arr.filter(id => id === specificValue);

Thanks for the help

Try this code

 const arr = [['123456','234567'], ['345678']]; const result = arr.flat(Infinity).find(val => val === "123456"); console.log(result);

You can learn more about array.flat() method here https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat

Let's keep going with your attempt.

The problem is your array is nested so array.filter will not work

Use array.flat with array.filter :

 let arr = [['123456','234567'], ['345678']]; let specificValue = '123456'; console.log(arr.flat().filter(i=>i==specificValue))

Since flat() takes a depth as an argument, to be able to search in an indefinite number of nested arrays you could try good old recursion:

const findRecursive = (array, target) => {
  for (let i = 0; i < array.length; i++) {
    if (array[i] === target) {
      return array[i];
    } else if (Array.isArray(array[i])) {
      return findRecursive(array[i], target);
    }
  }
}

console.log(findRecursive(arr, specificValue));

EDIT: Abdelrhman Mohamed has corrected me, you can specify an indefinite amount of nested arrays using array.flat(Infinity)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM