#83 filter map


  • 0
    administrators

    请你给原生的 Map 添加方法 filterKeysfilterValues,可以类似于于数组方法的 filter。它们分别可以对 Map 的键和值进行筛选,它们会返回一个新的 Map, 是对原有的 Map 的筛选结果,例如:

    const m = new Map([['Jerry', 12], ['Jimmy', 13], ['Tomy', 14]])
    
    m.filterKeys((key) => key.startsWith('J')) // => Map { Jerry => 12, Jimmy => 13 }
    m.filterValues((val) => val >= 13) // => Map { Jimmy => 13, Tomy => 14  }
    
    // 原有的 map 保持不变
    console.log(m) // => Map { Jerry => 12 , Jimmy => 13, Tomy => 14 }
    

  • 7
    管理员

    Map.prototype.filterKeys = function(fn) {
      return new Map([...this].filter(([k, v]) => fn(k)));
    }
    
    Map.prototype.filterValues = function(fn) {
      return new Map([...this].filter(([k, v]) => fn(v)));
    }
    

  • 0

    // TODO: 修改内置的 Map
    Map.prototype.filterKeys = function(cb) {
    let res = [];
    for(let i of this.keys()) {
    if(cb.call(this, i)) {
    res.push([i, this.get(i)]);
    }
    }
    return new Map(res);
    }
    Map.prototype.filterValues = function(cb) {
    let res = [];
    this.forEach((val, key) => cb.call(this, val) && res.push([key, val]));
    return new Map(res);
    }


登录后回复
 

与 ScriptOJ 的连接断开,我们正在尝试重连,请耐心等待