Как я могу превратить объект в объекты в массив с ES6 или Lodash - PullRequest
0 голосов
/ 07 октября 2018

Я пытаюсь сделать этот объект

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:...]

Ответы [ 4 ]

0 голосов
/ 07 октября 2018

Используя lodash, итерируйте объект с помощью _.flatMap().В обратном вызове flatMap 1-й параметр - это значение (например, { 1: 'x', 2: 'c' }), а 2-й параметр - это ключ (например, a).Присвойте второй параметр group.Используйте _.toPairs(), чтобы получить массив пар ([key, value]).Преобразуйте пары в объект с помощью Array.map() и включите group:

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>
0 голосов
/ 07 октября 2018

Вы можете использовать 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);
0 голосов
/ 07 октября 2018

Вы можете перебирать свои ключи на обоих уровнях и использовать синтаксис вычисленных ключей, как это предусмотрено в 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)
0 голосов
/ 07 октября 2018

Используйте Object.keys, чтобы получить все ключи от объекта.Затем используйте массив reduce function & внутри цикла функции обратного вызова над объектом и создайте новый объект.

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)
...