javascript - 如何推送具有特定状态集的数据?
问题描述
我有一个包含以下内容的 config.ts 文件:
export const keyOrders: {} = {
"aa": { active: true, order: 0 },
"bb": { active: true, order: 1 },
"cc": { active: true, order: 2 },
"dd": { active: true, order: 3 },
"ee": { active: false, order: 4 },
"ff": { active: true, order: 5 }
};
如果 active 为真,我将尝试推送到数组。我尝试了以下代码,如果活动为真,则按下键,但如果活动为假,则返回“未定义”
public keys = [];
public keyOrders = keyOrders;
ngOnInit() {
this.keys = Object.entries(this.keyOrders).map((a: any) => {
if(a[1].active == 'true') {
return a[0];
}
});
}
解决方案
如果要根据项目的order
属性对项目进行排序,请使用sort before map
。
filter
只会保留通过谓词的项目,在这种情况下是一个真实的active
属性。然后map
将此数组映射到键。
在你的情况下, usingmap
会给你一个相同长度的数组,你必须先过滤它。
type Order = { active: boolean, order: number };
const keyOrders: { [key: string]: Order } = {
"aa": { active: true, order: 0 },
"bb": { active: true, order: 1 },
"cc": { active: true, order: 2 },
"dd": { active: true, order: 3 },
"ee": { active: false, order: 4 },
"ff": { active: true, order: 5 }
}
this.keys = Object.entries(this.keyOrders)
.filter(([_, val]) => val.active)
.sort((a, b) => a[1].order - b[1].order)
.map(([key, _]) => key);
要确定类型,Object.entries()
必须由 Typescript 识别,为此,请添加"lib": [ "es2017.object" ]
到您的tsconfig.json
文件中。
这是一个 JavaScript 演示(类型被剥离):
const keyOrders = {
"aa": { active: true, order: 0 },
"bb": { active: true, order: 1 },
"cc": { active: true, order: 2 },
"dd": { active: true, order: 3 },
"ee": { active: false, order: 4 },
"ff": { active: true, order: 5 }
};
const keys = Object.entries(keyOrders)
.filter(([_, val]) => val.active)
.sort((a, b) => a[1].order - b[1].order)
.map(([key, _]) => key);
console.log(keys);
推荐阅读
- r - R Dplyr Summarize w/ Sum 不计算某些行。为什么?
- list - 将列表作为列表 Prolog 中的元素
- here-api - 在此处地图导航期间获取当前距离和时间,Android SDK
- php - 如何获取/使用数组的最大值
- ruby - 获取具有多个级别的哈希值
- jenkins - 如何管理 Jenkins 旧的构建历史
- php - 带有证书和密钥文件的php curl未与swish支付api连接
- javascript - 直接从应用程序调用时,云函数返回 null
- node.js - 奇怪的堆内存不足nodejs
- reactjs - React + Typescript - 参考输入错误