const obj = {
field1: 1000,
field2: 2000,
field3: {
field4: 'test4',
field5: 'test5',
},
};
// [{ value: 1000 }, { value: 2000 }, { value: 'test4' }, { value: 'test5' }]
const getValues = (params) => {
const array = [];
// keys, потому что нужно делать доп. проверку на ключ
Object.keys(params).reduce((acc, value) => {
if (typeof params[value] === 'object') {
getValues(params[value]);
}
return array.push({ value: params[value] });
}, []);
return array;
};
const getPrimitives = data =>
data instanceof Object
? Object.values(data).flatMap(getPrimitives)
: [ data ];
const result = getPrimitives(obj).map(value => ({ value }));
function* getPrimitives(data) {
if (data instanceof Object) {
for (const k in data) if (Object.hasOwn(data, k)) {
yield* getPrimitives(data[k]);
}
} else {
yield data;
}
}
const result = Array.from(getPrimitives(obj), n => ({ value: n }));
function getNestedData(data, test, getter = n => n) {
const result = [];
for (const stack = [ data ]; stack.length;) {
const n = stack.pop();
if (n instanceof Object) {
stack.push(...Object.values(n).reverse());
}
if (test(n)) {
result.push(getter(n));
}
}
return result;
}
const resutl = getNestedData(obj, n => n !== Object(n), n => ({ value: n }));