代码之家  ›  专栏  ›  技术社区  ›  DDan

从中选择一个属性映射值()

  •  0
  • DDan  · 技术社区  · 6 年前

    let myMap = new Map<string, any>();
    
    myMap.set("aaa", {a: 1, b: 2, c:3});
    myMap.set("bbb", {a: 1, b: 2, c:6});
    myMap.set("ccc", {a: 1, b: 2, c:9});
    
    let cs = myMap.values().map(x => x.c);
    

    从映射的所有条目中选择c属性。这是失败的:

    Property 'map' does not exist on type 'IterableIterator<any>'.
    

    有什么好办法吗?

    1 回复  |  直到 6 年前
        1
  •  4
  •   Shilly    6 年前

    你可以用 Array.from() 要将任何iterable转换为数组:

    let myMap = new Map();
    
    myMap.set("aaa", {a: 1, b: 2, c:3});
    myMap.set("bbb", {a: 1, b: 2, c:6});
    myMap.set("ccc", {a: 1, b: 2, c:9});
    
    // Basic example
    let cs = Array.from( myMap.values() ).map(x => x.c);
    
    console.log( cs );
    
    // Array.from also takes a mapping function as the second parameter, so even shorter:
    
    let cs_alt = Array.from( myMap.values(), x => x.c );
    
    console.log( cs_alt );