【问题标题】:I have an array that I need to transform in a object (JAVASCRIPT)我有一个需要在对象中转换的数组(JAVASCRIPT)
【发布时间】:2022-01-26 21:16:22
【问题描述】:

嗯,基本上我有一个数组,里面有一个对象,这个对象里面有一个对象数组,看起来像这样:

var array = [
  {articles: [
    {number: "123"},
    {number: "143"},
  ]},
  {paragraph: [
    {number: "197"},
  ]},
]

而且我真的很愿意得到一个对象值作为回报,像这样

{articles: [...], paragraph: [...]}

有人可以帮帮我吗?

【问题讨论】:

标签: javascript arrays object filter


【解决方案1】:

这可以使用an array reducer 来完成。

const array = [
  { articles: [{ number: "123" }, { number: "143" }] },
  { paragraph: [{ number: "197" }] },
];

const formatted = array.reduce((accumulator, currentValue) => {
    const [[key, value]] = Object.entries(currentValue);
    return { ...accumulator, [key]: value }
}, {});

console.log(formatted);

我们正在做的是在第 9 行用一个空对象初始化我们的 reducer,然后遍历数组。每次迭代时,我们都会返回对象,并在其末尾附加新的键和值。

【讨论】:

  • 谢谢,这解决了问题,不用担心
【解决方案2】:

您可以按嵌套对象的外部属性进行分组。

const
    array = [{ articles: [{ number: "123" }, { number: "143" }] }, { paragraph: [{ number: "197" }] }],
    result = array.reduce((r, o) => {
        Object
            .entries(o)
            .forEach(([k, a]) => (r[k] ??= []).push(...a));

        return r;
    }, {});

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

  • 谢谢,我使用了第一个答案,两者都是等价的,我只取了第一个,因为命名为第一个,所以我使用了,但是谢谢,我也赞成你的解决方案
【解决方案3】:

Iterate over the array,并使用Object.entries获取键和值。

const array=[{articles:[{number:"123"},{number:"143"}]},{paragraph:[{number:"197"}]}];

const out = {};

for (const obj of array) {
  const [[key, value]] = Object.entries(obj);
  out[key] = value;
}

console.log(out);

【讨论】:

  • 谢谢,我使用了第一个答案,使用reduce版本,但是你的版本也很好,非常直观,再次感谢
【解决方案4】:
let array = [
  {articles: [
    {number: "123"},
    {number: "143"},
  ]},
  {paragraph: [
    {number: "197"},
  ]},
]


let obj = {}
array.forEach(a => {

   if('articles' in a){
       obj.articles = a.articles
   }

   if('paragraph' in a){
       obj.paragraph = a.paragraph
   }
})

console.log(obj)

【讨论】:

  • 工作,但是,这个解决方案需要为每个新类型添加一个条件,所以,不是那么可扩展的,虽然我发现这是一个很好的答案,如果我只有两种类型,但是谢谢无论如何。
猜你喜欢
  • 2018-03-11
  • 1970-01-01
  • 2021-06-07
  • 1970-01-01
  • 2020-11-19
  • 2013-11-21
  • 2023-01-25
  • 2017-06-22
相关资源
最近更新 更多