Отфильтровать объект JS

139
27 апреля 2019, 23:50

Есть объект с вложениями, нужно отфильтровать его ветки по нужному значению в листе.

Дано:

let data = '[{"caption":"Настройки","commands":[{"caption":"Основные","commands":[{"caption":"Цены"},{"caption":"Типы цен"},{"caption":"Первичные документы"},{"caption":"Настройка отображения ТМЦ в первичных документах"},{"caption":"Настройка первичных документов"}]},{"caption":"Общие настройки","commands":[{"caption":"Глобальные настройки"},{"caption":"Типы процессов"},{"caption":"Тип процесса (функция)"},{"caption":"Нумераторы"},{"caption":"Тип нумератора"},{"caption":"Нумератор"},{"caption":"Календарь"},{"caption":"Тип календаря"},{"caption":"Рабочий календарь"},{"caption":"Сервисы"},{"caption":"Заполнение пустых кодов"},{"caption":"Заполнить RTClass"}]}]}]';

Ожидается

let dataRES = '[{"caption":"Настройки","commands":[{"caption":"Основные","commands":[{"caption":"Первичные документы"}]}]}]';

То, что набросал, но почему-то не получается

let data = '[{"caption":"Настройки","commands":[{"caption":"Основные","commands":[{"caption":"Цены"},{"caption":"Типы цен"},{"caption":"Первичные документы"},{"caption":"Настройка отображения ТМЦ в первичных документах"},{"caption":"Настройка первичных документов"}]},{"caption":"Общие настройки","commands":[{"caption":"Глобальные настройки"},{"caption":"Типы процессов"},{"caption":"Тип процесса (функция)"},{"caption":"Нумераторы"},{"caption":"Тип нумератора"},{"caption":"Нумератор"},{"caption":"Календарь"},{"caption":"Тип календаря"},{"caption":"Рабочий календарь"},{"caption":"Сервисы"},{"caption":"Заполнение пустых кодов"},{"caption":"Заполнить RTClass"}]}]}]'; 
 
function f(data, searchValue) { 
  return data.filter((item) => { 
    if (item.commands) { 
      let res = f(item.commands, searchValue); 
      if (res.length > 0) { 
        return res 
      } 
    } else { 
      if (item.caption.toLowerCase() === searchValue.toLowerCase()) { 
        return item.caption; 
      } 
    } 
  }) 
} 
 
let dd = JSON.parse(data); 
console.log('dd', dd); 
let newArr = f(dd, 'Первичные документы'); 
console.log('>>>newArr', newArr);

READ ALSO
Как сделать слайдер из div блоков на javaScript [закрыт]

Как сделать слайдер из div блоков на javaScript [закрыт]

Подскажите пожалуйста, нужно сделать слайдер на сайт как на картинкеПри клике на стрелку или пагинацию блок должен меняться

151
Ошибку синтаксиса JSON в консоли

Ошибку синтаксиса JSON в консоли

Есть каталог товаров в JSON файле:

132
Google script не находит таблицу по имени

Google script не находит таблицу по имени

Есть некий скрипт, который должен получить из запроса POST параметры и записать их в таблицу Google SheetВот код скрипта:

161