Я пытаюсь сделать этот объект
obj={ a:{ 1:"x", 2:"c"}, b:{ 1:"v", 2:"b" }, c:{ 4:"n", 2:"k" } }
до
obj=[ 0:{group:"a" ,1:"x"}, 1:{group:"a", 2:"c"}, 2:{group:"b",1:"v"}, 3:...]
Используя lodash, итерируйте объект с помощью _.flatMap().В обратном вызове flatMap 1-й параметр - это значение (например, { 1: 'x', 2: 'c' }), а 2-й параметр - это ключ (например, a).Присвойте второй параметр group.Используйте _.toPairs(), чтобы получить массив пар ([key, value]).Преобразуйте пары в объект с помощью Array.map() и включите group:
_.flatMap()
{ 1: 'x', 2: 'c' }
a
group
_.toPairs()
[key, value]
Array.map()
const obj = {"a":{"1":"x","2":"c"},"b":{"1":"v","2":"b"},"c":{"2":"k","4":"n"}}; const result = _.flatMap(obj, (o, group) => _.toPairs(o).map(([k, v]) => ({ group, [v]: k }))); console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
Вы можете использовать Object.entries() для преобразования объекта в массив.Используйте .reduce(), .concat() и map() для создания нового массива
Object.entries()
.reduce()
.concat()
map()
let obj = { a: { 1: "x", 2: "c" }, b: { 1: "v", 2: "b" }, c: { 4: "n", 2: "k" } } let result = Object.entries(obj) .reduce((c, [k, v]) => c.concat(Object.entries(v).map(o => ({group: k,[o[0]]: o[1]}))), []) console.log(result);
Вы можете перебирать свои ключи на обоих уровнях и использовать синтаксис вычисленных ключей, как это предусмотрено в ES6 / ES2015:
let obj={ a:{ 1:"x", 2:"c"}, b:{ 1:"v", 2:"b" }, c:{ 4:"n", 2:"k" } } let result = [] for (let k1 in obj){ for (let k2 in obj[k1] ){ result.push({group:k1,[k2]:obj[k1][k2]}) } } console.log(result)
Используйте Object.keys, чтобы получить все ключи от объекта.Затем используйте массив reduce function & внутри цикла функции обратного вызова над объектом и создайте новый объект.
Object.keys
reduce
let obj = { a: { 1: "x", 2: "c" }, b: { 1: "v", 2: "b" }, c: { 4: "n", 2: "k" } } let m = Object.keys(obj); let z = m.reduce(function(acc, curr) { if (typeof(obj[curr]) === 'object') { for (let keys in obj[curr]) { let __ob = {}; __ob.group = curr; __ob[keys] = obj[curr][keys] acc.push(__ob) } } return acc; }, []) console.log(z)