Javascript: Как преобразовать и отобразить объект, содержащий объекты, в массив? - PullRequest
0 голосов
/ 09 января 2020

В Javascript, как отобразить и преобразовать этот объект:

  {
    0: {k1 : v1},
    2: {k2 : v2}
  }

в этот массив:

[
    {
        label: k1,
        value: v1
    },
    {
        label: k2,
        value: v2
    }
]

obs .: однострочники хороши, но все ответы добро пожаловать.

Я не смог получить желаемый результат, но я слепо следовал формулам вроде:

const objectMap = (obj, fn) =>
  Object.fromEntries(
    Object.entries(obj).map(
      ([k, v], i) => [i, fn(v, k, i)]
    )
  )
const cfieldsFinal = objectMap(modcf, (k, v) => ({
  label: v,
  value: k
}))

, и это почти то, что мне нужно, за исключением того, что это все еще объект:

output => {0: {label: k1, value: v1}, 1: {label: k2, value:  v2}}

Итак, только полный нуб, такой как я, застрянет на этой части ...

Ответы [ 2 ]

2 голосов
/ 09 января 2020

Вы очень близки, вам просто нужно построить объект вручную. Начните с использования Array.values() для преобразования data в массив. Итерируйте массив с Array.flatMap(), чтобы сгладить подмассивы, созданные внутренней картой. Преобразуйте каждый объект в массив пар [ключ, значение]. Сопоставьте каждую пару и создайте объект.

const data = {0: { k1: 'v1' }, 2: { k2: 'v2' }}

const result = Object.values(data) // convert data to an array
  .flatMap(o => // map to a flattend array
    Object.entries(o) // get the entries of each object 
      .map(([label, value]) => ({ label, value })) // create a new object from each entry
  )
  
console.log(result)
0 голосов
/ 09 января 2020

const foo = {
  0: {
    k1: "v1"
  },
  2: {
    k2: "v2"
  }
};

/*
[
    {
        label: k1,
        value: v1
    },
    {
        label: k2,
        value: v2
    }
]
*/

const oe = Object.entries;
const bar = oe(foo).map(([k, v]) => {
  const [label, value] = oe(v)[0];
  return {
    label,
    value
  };
});

console.log(bar);
...