首页 > 解决方案 > 如何将一组对象转换回一个对象

问题描述

我得到了一组具有以下结构的对象:

const cars = {
  ford: {
    entries: ['ford 150']
  },
  chrysler: {
    entries: ['Voyager']
  },
  honda: {
    entries: []
  },
  toyota: {
    entries: ['sienna']
  },
  mercedes: {
    entries: []
  },
}

为了让用户能够重新排列汽车的顺序,我需要过滤掉条目为零的汽车品牌,所以我这样做:

const filteredCars = Object.values(cars).filter(removeCarsWithNoEntries)

function removeCarsWithNoEntries(e) {
  if (e.entries[0]) return e.entries
}

然后,一旦顺序重新排列,我必须将对象转换回其原始形式,但顺序重新排列,意思是这样的:

cars = {
   toyota: {
    entries: ['sienna']
  },
  chrysler: {
    entries: ['Voyager']
  },
  ford: {
    entries: ['ford 150']
  },
  honda: {
    entries: []
  },
  mercedes: {
    entries: []
  },
}

我已经阅读过array.reduceObject.assign但到目前为止我尝试过的东西都不起作用。

如何将对象数组转换回具有 0 个条目的原始汽车品牌的单个对象?谢谢。

标签: javascriptnode.jsarrays

解决方案


您可以通过 将对象转换为条目Object.entries(),然后按值(对中的第二项)进行过滤/排序,然后使用 转换回对象Object.fromEntries()

const cars = {"ford":{"entries":["ford 150"]},"chrysler":{"entries":["Voyager"]},"honda":{"entries":[]},"toyota":{"entries":["sienna"]},"mercedes":{"entries":[]}}

const sorted = Object.fromEntries(
  Object.entries(cars)
    .sort(([, { entries: a }], [, { entries: b }]) => b.length - a.length)
)

const filtered = Object.fromEntries(
  Object.entries(cars)
    .filter(([, v]) => v.entries.length)
)

console.log({ sorted, filtered })


推荐阅读