javascript - 如何将一组对象转换回一个对象
问题描述
我得到了一组具有以下结构的对象:
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.reduce
,Object.assign
但到目前为止我尝试过的东西都不起作用。
如何将对象数组转换回具有 0 个条目的原始汽车品牌的单个对象?谢谢。
解决方案
您可以通过 将对象转换为条目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 })
推荐阅读
- python - Tkinter 更新时删除旧框架
- ios - 每个退化三角形的颜色数据
- python - 如何在 keras 中构建置换不变性神经网络?
- django - 用 unicode Django 和 python3.7 替换字符串
- javascript - 防止d3画笔有空选择
- android - 单独的 Android Gradle Jvm 版本用于应用程序和单元测试
- reactjs - React - TypeError:props.handleStatusClick 不是函数
- python - 遍历函数内部的列表时,为什么 0 不是 0.0?
- symfony - 尽管条件不同 $this->price ,但价格被覆盖;
- git - 在一个文件中分支特定内容