【问题标题】:How to push the data with specific status set?如何推送具有特定状态集的数据?
【发布时间】:2019-03-11 11:40:31
【问题描述】:

我有一个包含以下内容的 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 为真,我会尝试推送到数组。我尝试过以下代码,如果 active 为 true,则按下键,但如果 active 为 false,则返回“未定义”

public keys = [];
public keyOrders = keyOrders;

ngOnInit() {
     this.keys = Object.entries(this.keyOrders).map((a: any) => {
            if(a[1].active == 'true') {
                return a[0];
            }
        });
}

【问题讨论】:

    标签: javascript angular typescript


    【解决方案1】:

    使用filter,后跟map

    如果您想根据项目的order 属性对项目进行排序,请在map 之前使用sort

    filter 只会保留通过谓词的项目,在这种情况下是真实的active 属性。然后map 会将这个数组映射到键上。

    在你的情况下,使用map 会给你一个相同长度的数组,你必须先过滤它。

    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 识别,为此,请在您的 tsconfig.json 文件中添加 "lib": [ "es2017.object" ]

    这是一个 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);

    【讨论】:

    • 您的解决方案在 sn-p 中有效,但在我的情况下,我得到 Property 'active' does not exist on type '{}'.ts 错误,我现在更新了问题,需要订购结果基于订单价值
    • @nas,我修复了示例中的类型,您的问题可能是 Object.entries() 无法识别,我还添加了排序。希望对你有帮助
    猜你喜欢
    • 2020-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-18
    • 2018-05-10
    • 2021-01-29
    • 1970-01-01
    相关资源
    最近更新 更多