Примечание: children
- это непротиворечивое имя, и id
не будет существовать вне объекта children
.
Так что из obj я хотел бы создать массивнапример:
const idArray = [1, 2, 3, 4, 5, 6, 7]
Учитывая, что вопрос не содержит каких-либо ограничений относительно того, как вывод получен из ввода, и что вход является согласованным, где значение свойства "id"
являетсясвойство digit и id
определяется только в свойстве "children"
, за исключением случая первого "id"
в объекте, входной простой объект JavaScript может быть преобразован в строку JSON
с использованием JSON.stringify()
, RegExp
/"id":\d+/g
соответствует свойству "id"
и одному или нескольким цифровым символам после имени свойства, которое затем сопоставляется с .match()
цифрой в предыдущем совпадении с помощью Regexp
\d+
и преобразует значение массива в JavaScriptчисло с использованием оператора сложения +
const myObject = {"id":1,"children":[{"id":2,"children":[{"id":3}]},{"id":4,"children":[{"id":5,"children":[{"id":6,"children":[{"id":7}]}]}]}]};
let res = JSON.stringify(myObject).match(/"id":\d+/g).map(m => +m.match(/\d+/));
console.log(res);
JSON.stringify()
replacer
В качестве альтернативы можно использовать .push()
значение каждого "id"
имени свойства в пределахобъект в массив
const myObject = {"id":1,"children":[{"id":2,"children":[{"id":3}]},{"id":4,"children":[{"id":5,"children":[{"id":6,"children":[{"id":7}]}]}]}]};
const getPropValues = (o, prop) =>
(res => (JSON.stringify(o, (key, value) =>
(key === prop && res.push(value), value)), res))([]);
let res = getPropValues(myObject, "id");
console.log(res);
Поскольку значения свойств входных данных для сопоставления являются цифрами, все объекты JavaScript можно преобразовать в строку и RegExp
\D
может использоваться для замены всех символов, которые не являются цифрами, распространения результирующей строки в массив и .map()
цифр в числах JavaScript
let res = [...JSON.stringify(myObj).replace(/\D/g,"")].map(Number)