#javascript #multidimensional-array
Вопрос:
Я хочу пройти через вложенный массив и должен найти целевой элемент в массиве. Пример пути [2, 1]
должен вернуться {text: 'More 2'}
, и путь [2, 2, 1]
должен вернуться { text: 'Other-2' }
. Я попробовал функции lodash, но пока безуспешно. Мой вложенный массив приведен ниже:
var data = [
{ text: 'Item 1', },
{ text: 'Item 2', },
{
text: 'More',
children: [
{ text: 'More 1', children: [] },
{ text: 'More 2'},
{ text: 'Other', children:[ {text: 'Other-1'}, {text: 'Other-2'}, {text: 'Other-3'} ] }
]
}
];
Комментарии:
1. Я попытался зациклить массив, например, array.forEach(элемент => { a = arr[элемент]; console.log(a), если(a.дети != null amp;amp; a.дети. длина){ arr = a; }еще { результат = a; } });
2. Вы должны поместить свой код, который не работает, в вопрос вместе с комментариями о том, что не работает… это очень поможет людям рассказать вам, что не так с вашим кодом (для чего хорош этот сайт), а не о том, что писать.
3. @Beska мой полный код немного сложен, и здесь вставлена минимальная строка кода для решения конкретной проблемы. Мне нужна простая функция JavaScript, которая может принимать массив индексов, например var = indexesToCheck = [2,2,1]; и она должна выполнять цикл, хотя этот вложенный массив и ожидаемый элемент { текст: ‘Другой-2’}. Помните, что заданные индексы на самом деле являются последовательностью для достижения этого конкретного элемента в массиве.
4. Верно… вы опубликовали минимальный код в вопросе, который содержит некоторые примеры данных, и это хорошо. Но для того, чтобы получить качественные ответы, вам обычно следует опубликовать код, с которым возникли проблемы, как часть question…it похоже, вы сделали часть этого в своем первом комментарии. Этот код должен быть частью вопроса, поскольку он дает людям возможность увидеть, что вы пытаетесь сделать, и что может отсутствовать или быть неправильным в вашем подходе.
Ответ №1:
Ну, это не многомерный массив, и не потрепанный массив массивов. Это массив объектов (которые могут содержать другие массивы объектов, которые могут…).
Lodash _.get()
должен сделать это за тебя:
const _ = require('lodash');
const data = data = [
{ text: 'Item 1', },
{ text: 'Item 2', },
{
text: 'More',
children: [
{ text: 'More 1', children: [] },
{ text: 'More 2'},
{ text: 'Other', children:[ {text: 'Other-1'}, {text: 'Other-2'}, {text: 'Other-3'} ] }
]
}
];
const widget = _.get(obj, '[2].children[1]');
console.log('widget',widget);
Или… сверни свой собственный. Не так уж трудно пройти по дереву:
function select(data, ...path) {
let i = path.shift() ;
let node = data[i] ;
while ( node amp;amp; (i=path.shift()) !== undefined ) {
node = node?.children?.[i] ;
}
return node ;
}
const widget = select( data, 2, 1 );
console.log(widget);