如何从地图返回默认值?

新手上路,请多包涵

使用 ES6 代理对象,可以在普通对象中不存在属性时返回默认值。

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Proxy

如何用地图做到这一点?我尝试了以下代码,但始终返回默认值:

 var map = new Map ([
    [1,  'foo'],  // default
    [2,  'bar'],
    [3,  'baz'],
]);

var mapProxy = new Proxy(map, {
    get: function(target, id) {
        return target.has(id) ? target.get(id) : target.get(1);
    },
});

console.log( mapProxy[3] );  // foo

原文由 1in7billion 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 623
2 个回答

那是因为您的地图键是数字,但代理属性名称始终是字符串。您需要 id 转换为一个数字。

工作示例(需要现代 JS 引擎):

 var map = new Map ([
    [1,  'foo'],  // default
    [2,  'bar'],
    [3,  'baz'],
]);

var mapProxy = new Proxy(map, {
    get: function(target, id) {
        // Cast id to number:
        id = +id;
        return target.has(id) ? target.get(id) : target.get(1);
    },
});

console.log( mapProxy[3] ); // baz
console.log( mapProxy[10] ); // foo

原文由 Alexander O‘Mara 发布,翻译遵循 CC BY-SA 3.0 许可协议

一个很好的写法是:

 const map = new Map ([
    [1,  'foo'],  // default
    [2,  'bar'],
    [3,  'baz'],
]);

const get = (id) => map.get(id) ?? map.get(3);  // 3 as default
console.log(get(1));  // Returns 'foo' as expected
console.log(get(42));  // Defaults to 'baz'

原文由 user42488 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题