从值为0的数组中删除对象

时间:2018-08-31 16:57:18

标签: javascript

您好,我正在根据一些外部数据生成一个包含对象的数组。这是我的代码:

  modifyFatalitiesByCause(data) {
    let array = [];
    for (let x in data) {
      array.push({
        "name": data[x]['HarmfulEvent'],
        "value": parseInt(data[x]['Deaths']),
      })
    }
    return array;
  }

这工作正常,将输出以下数据:(这里只是大数组的一小块)

[
    {name: "Injured in Vehicle (Non-Collision)", value: 1},
    {name: "Fire Hydrant", value: 1},
    {name: "Snow Bank", value: 0},
    {name: "Cargo/Equipment", value: 0}
]

我不想在数组中显示值为0的对象。我是否需要在最后删除它们,还是可以修改我的for x in data循环以仅推送没有值0的对象。

哪个是更简单的解决方案,任何人都可以提供帮助吗?

谢谢!

5 个答案:

答案 0 :(得分:3)

是的,您可以在将元素推入像这样的if(parseInt(data[x]['Deaths']) > 0之前进行检查,然后再推非零值,但是Array.prototype.filter()对我来说很酷:)

let array = [{
    name: "Injured in Vehicle (Non-Collision)",
    value: 1
  },
  {
    name: "Fire Hydrant",
    value: 1
  },
  {
    name: "Snow Bank",
    value: 0
  },
  {
    name: "Cargo/Equipment",
    value: 0
  }
];
result = array.filter(elm => elm.value > 0);
console.log(result);

答案 1 :(得分:2)

您可以在最后将它们全部删除,但是在构建时不将它们推入阵列将更加有效。 像这样:

1 + 2*3 = 7

答案 2 :(得分:1)

您只需在<script> import {MDCTopAppBar} from '@material/top-app-bar'; import {MDCDrawer} from "@material/drawer"; const drawer = MDCDrawer.attachTo(document.querySelector('.mdc-drawer')); const topAppBar = MDCTopAppBar.attachTo(document.getElementById('app-bar')); topAppBar.setScrollTarget(document.getElementById('main-content')); topAppBar.listen('MDCTopAppBar:nav', () => { drawer.open = !drawer.open; }); </script> 循环中添加一个检查,即可在您的for非零的数组中添加对象。请尝试以下操作:

data[x]['Deaths'])

答案 3 :(得分:1)

始终最好在业务逻辑执行之前创建谓词if语句以检查验证。这是我解决这个问题的方法。

  modifyFatalitiesByCause(data) {
    let array = [];
    for (let record in data) {
     if(isDeathCountZero(record, data)){
       array.push({
         "name": data[record]['HarmfulEvent'],
         "value": parseInt(data[record]['Deaths']),
       });
     } 
   }
    return array;
  }

 isDeathCountZero(record, data){
    return (parseInt(data[record]['Deaths']) != 0);
}

答案 4 :(得分:-1)