【问题标题】:Convert Nested object into custom array of objects: Javascript将嵌套对象转换为自定义对象数组:Javascript
【发布时间】:2022-12-18 07:40:50
【问题描述】:

我有一组看起来像这样的对象

const test = {
  a: { name: "A", selected: [1, 2, 3], display: [1, 2, 3] },
  b: { name: "B", selected: [4, 5, 6], display: [4, 5, 6] },
  c: { name: "C", selected: [7, 8, 9], display: [7, 8, 9] },
  d: { name: "D", selected: [], display: [] }
};

我希望将上面的内容转换如下


const output = [
  { field: "A", selectedValues: [1, 2, 3] },
  { field: "B", selectedValues: [4, 5, 6] },
  { field: "C", selectedValues: [7, 8, 9] }
];

基本上输入对象中的键在该数组的最终对象中被制作为field,输入对象中的selected应该在最终对象中被制作为selectedValues。请注意只有具有某些条目的对象 selected 应该放入最终数组

此外,当输入对象中的所有对象都将 selected 设为空时,则只返回空数组,否则返回上述输出。

我试过的代码


const result = Object.entries(test).map(([name, v]) => ({
  field: name,
  selectedValues: v
}));

console.log(result);

【问题讨论】:

  • 你是说selectedValues: v.selected吗?

标签: javascript arrays ecmascript-6 ecmascript-5


【解决方案1】:

因为你想要

输入对象中的 selected 应在最终对象中作为 selectedValues。

您应该在映射时导航到 .selected 属性(子数组),而不是引用整个对象。然后,根据该数组中是否有任何值进行过滤。

const test = {
  a: { name: "A", selected: [1, 2, 3], display: [1, 2, 3] },
  b: { name: "B", selected: [4, 5, 6], display: [4, 5, 6] },
  c: { name: "C", selected: [7, 8, 9], display: [7, 8, 9] },
  d: { name: "D", selected: [], display: [] }
};


const result = Object.entries(test)
  .map(([name, obj]) => ({
    field: name,
    selectedValues: obj.selected
  }))
  .filter(({ selectedValues }) => selectedValues.length);

console.log(result);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-18
    • 2018-01-24
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    • 2018-01-04
    • 1970-01-01
    • 2020-07-07
    相关资源
    最近更新 更多