javascript - 在 JavaScript 中检查没有 hasOwnProperty 的哈希键是否存在
问题描述
鉴于此示例数据:
let foo = [1,2,2,3,5,3]
let seen = {}
以下检查密钥是否存在的方法有什么区别?我可以使用第一种方式遇到一些问题吗?
foo.filter(function(item) {
return seen[item] ? false : (seen[item] = true);
});
对比
foo.filter(function(item) {
return seen.hasOwnProperty(item) ? false : (seen[item] = true);
});
解决方案
首先,如问题所示,两者都不正确,因为您没有使用filter
(新的过滤数组)的返回值。在这种情况下使用forEach
or (在现代系统上)for-of
。但也许您实际上正在使用它,只是没有在您的问题中表明这一点。
解决您的主要问题:
第一种方法会错误地假设某些东西是falsy时没有看到。虚假值是0
, ""
, NaN
, null
, undefined
, 当然false
。(所有其他值都是真实的。)您的第二种方法将正确处理这些值。
您的两个检查之间的另一个区别是第一个获取属性,而不管它在原型链中的哪个位置;第二个只查看对象本身(这可能是您想要的)。对于您的示例对象,这实际上只对Object.prototype
诸如提供的属性很重要valueOf
,但是......
推荐阅读
- ant - 如何从 Jmeter 运行 ant build.xml(具有 UI selenium 测试用例)以查看性能?
- java - 如何修复 Android(Mac 机器)的 react-native 运行失败?
- laravel - 文件移动到另一个文件夹 laravel
- react-admin - 使用 Hydra dataProvider 的 react-admin 中的多对一问题 -> 一对多 ArrayInput 元素
- solr - Solr 查询通配符问题,结果数与实际文档数不匹配
- python - Python 错误:未定义全局名称 Xi
- javascript - 拆分不与令牌分开
- oracle - Oracle Apex LOV 返回多个值,就像表单 6i lov
- html - 在框内显示图像而不拉伸它
- python - 如何获取 pxssh 模块输出?