js рекурсия и объекты [закрыт]

203
03 ноября 2018, 00:30
let a = {
    lentgh: 2,
    0: false,
    1: {
        lentgh: 3,
        0: false,
        1: false,
        2: {
            lentgh: 2,
            0: false,
            1: false 
        }
    }
}

На выходе должны получить: false, false, false, false, false

Answer 1

Заменил false на строки, чтобы было понятно, что всё работает.

function process(obj) { 
  if (typeof obj !== 'object') return [obj]; // крайний случай, не объект 
  let res = []; 
  for (let i=0; i<obj.lentgh; ++i) { 
    // рекурсивно собираем скаляры в массив 
    res = res.concat(process(obj[i])); 
  } 
  return res; 
} 
 
let a = { 
    lentgh: 2, 
    0: '0', 
    1: { 
        lentgh: 3, 
        0: '1.0', 
        1: '1.1', 
        2: { 
            lentgh: 2, 
            0: '1.2.0', 
            1: '1.2.1'  
        } 
    } 
}; 
console.log(process(a))

Если починить свойство length, можно прозрачно преобразовывать объект в массив:

function process(obj) { 
  if (typeof obj !== 'object') return obj; // крайний случай, не объект 
  return Array.from(obj) 
    .reduce((c, item) =>  
        c.concat(process(item)), []); 
} 
 
let a = { 
    length: 2, 
    0: '0', 
    1: { 
        length: 3, 
        0: '1.0', 
        1: '1.1', 
        2: { 
            length: 2, 
            0: '1.2.0', 
            1: '1.2.1'  
        } 
    } 
}; 
console.log(process(a))

Answer 2

let a = { 
    lentgh: 2, 
    0: false, 
    1: { 
        lentgh: 3, 
        0: false, 
        1: false, 
    } 
}, parseData = (object, parsed = []) => { 
  Object.keys(object).forEach(e => { 
    if (!isNaN(+e)) { 
       if (typeof object[e] === "object") 
            return parseData(object[e], parsed); 
         
       parsed.push(object[e]); 
    } 
  }); 
   
  return parsed; 
} 
 
console.log(parseData(a));

READ ALSO
Выпадающее меню не отрабатывает cookie

Выпадающее меню не отрабатывает cookie

Моя задача состоит в том, чтобы меню запоминало текущее состояние, когда открыт целый "аккордеон" и при переходе по ссылке на определенный...

147
Опциональные символы в маске ввода JS

Опциональные символы в маске ввода JS

Есть форма, в которую нужно вводить номер банковской карты

205
SVG изменить цвет и добавить :hover

SVG изменить цвет и добавить :hover

Помогите, пожалуйста, изменить цвет SVG и сделать так, что бы на hover цвет менялсяCss изменить не получается, или это только прописать на JS возможно?...

267
Добавить новую таблицу в knex.js

Добавить новую таблицу в knex.js

Есть база данных в postgresql и 10 таблиц, теперь необходимо добавить еще пару таблиц, в файле migrationjs

186