как DFS работает на вложенных массивах в JavaScript - PullRequest
0 голосов
/ 21 марта 2019

Может кто-нибудь объяснить, как DFS работает на вложенных массивах. Я имею в виду все источники вики и стековера, но я не совсем понимаю, как выполнить рекурсивный поиск в массиве с использованием DFS, рассмотрите это как мой массив:

array = ["abc","abc2","abc22"];
array[0] = ["test","test1","test2"];
array[0][0] = ["22","33","333"];
array[0][1] = ["we","we2","we3"];
array[0][1][2] = ["soon","soon2","soon3"];
array[1] = ["get"];
array[1][0] ="get2";
array[2] = ["set","set2","set3"];
array[2][0] = "ready";
array[2][1] = ["123","334"];
array[2][2] ="cry";

https://jsfiddle.net/fmbw0eth/7/

как нам пройти через каждый элемент массива и его дочерние массивы и так далее ... Итак, у меня есть это до сих пор:

array.map(function(n,i){
  if (Array.isArray(n)) {
  n.map(function(n,i){
   // and keep checking for arrays and when reached at the bottom ,
   // somefunction(n);
})
}else {
someFucntion(n);
}

})

Это правильный подход для DFS или есть лучший рекурсивный способ обхода массива?

1 Ответ

0 голосов
/ 21 марта 2019

DFS используются для графиков или деревьев. То, с чем вы работаете, это массив. Если вы хотите посетить все возможные вложенные массивы и их индексы, вы можете использовать рекурсию для перебора элементов, которые являются массивами.

var array;
array = ["abc","abc2","abc22"];
array[0] = ["test","test1","test2"];
array[0][0] = ["22","33","333"];
array[0][1] = ["we","we2","we3"];
array[0][1][2] = ["soon","soon2","soon3"];
array[1] = ["get"];
array[1][0] ="get2";
array[2] = ["set","set2","set3"];
array[2][0] = "ready";
array[2][1] = ["123","334"];
array[2][2] ="cry";

function getAllNestedElements(arr) {
	var result = [];
    for(var i=0; i<arr.length; i++) {
    	if (Array.isArray(arr[i])) {
        	result = result.concat(getAllNestedElements(arr[i]));
        }
        else {
        	result.push(arr[i]);
       	}
    }
    //console.log(result);
    return result;
}

console.log(getAllNestedElements(array));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...