javascript - 测试等于条件时使用下划线时的奇怪行为

标签 javascript underscore.js

我在项目中使用 Underscore.js 并遇到了奇怪的行为。当我使用 changes_summary === 2 过滤数组时,我得到了所需的结果,但是当我与 changes_summay === 0 使用相同的结果时,我没有得到任何输出.

代码如下:

var result={
   "data": [
     {
      "id": 956,
      "changes_summary": 2,
      "name": "Pradeep",
      "age": 32
     },
     {
      "id": 956,
      "changes_summary": 0,
      "name": "praveen",
      "age": 22
     }
  ]
}


var filtered = _.filter(result.data, function(obj){ 
    return (obj.changes_summary && obj.changes_summary === 2)
});
//working when comparing with changes_summary with 2 but not working when comparing with 0
console.log(filtered);

请让我知道我哪里出错了。附 Jsfiddle 链接:Jsfiddle

最佳答案

当属性值为 0 时,第一个测试 - obj.changes_summary 将失败,因为这是一个虚假值。如果您要测试该属性是否存在于对象中,您可以执行以下操作:

return (("changes_summary" in obj) && obj.changes_summary === 0);

关于javascript - 测试等于条件时使用下划线时的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31564524/

相关文章:

javascript - 从下划线中的数组中删除值

javascript - Jasmine 依赖注入(inject)

javascript - 使用下划线随机选择并从集合中删除

arrays - 单个对象的 lodash 值到具有固定键的对象数组

arrays - 通过匹配 Nodejs 中的属性来合并 JSON 数组

javascript - 固定模板侧边栏位置固定

javascript - HTML 视频仅出现在窗口调整大小时

javascript - 如何更改显示 jQuery 输入的位置

javascript - Angular 的 $http.post 在 MS Edge 中不工作

javascript - Underscore.js 模板渲染