从对象数组中删除零值

时间:2016-07-20 19:58:12

标签: javascript arrays

问题

我正在从JavaScript函数中推送值并使用对象填充数组。 我想要发生的是删除零的值+值。

返回数组的示例

[Object percent: 516 unit: -10.689124404913258
 Object percent: 516  unit: -9.011227255423254
 Object percent: 561  unit: -12.669770888525518
 Object percent: 6516 unit: -15.99180968320506 
 Object percent: 0  unit: 0] 

JavaScript

my_arr = []

  for(var i = my_arr.length - 1; i >= 0; i--) {
    if(array[i] === 0) {
       array.splice(i, 1);
    }
   return my_arr;
}

4 个答案:

答案 0 :(得分:3)

如果您想从数组中删除具有价格和单位的项目,可以使用此项。

var items = [
    { percent: 516, unit: -10.689124404913258 }, 
    { percent: 516, unit: -9.011227255423254 }, 
    { percent: 561, unit: -12.669770888525518 }, 
    { percent: 6516, unit: -15.99180968320506 }, 
    { percent: 0, unit: 0 }
];

items = items.filter(i => i.percent && i.unit);

console.log(items);

BTW 你的主要问题是你在循环内部返回,这将在第一个回合中停止循环。 我甚至不相信你的代码有效甚至一段时间,因为在函数范围外使用return我有点错误:

  

Uncaught SyntaxError:非法返回语句

答案 1 :(得分:2)

试试:

my_arr.filter(function(element){
  return element.percent && element.unit;
});

如果percentunit属性等于0,则会产生错误结果,并会从结果中滤除。

答案 2 :(得分:2)

假设您的源数组看起来像这样......

var sourceArray = [
    { percent: 123, unit: -1 },
    { percent: 456, unit: -2 },
    { percent: 0, unit: 0 },
    { percent: 789, unit: -3 }
];

....然后你可以使用Array.prototype.filter函数获得一个过滤的数组:

var filteredArray = sourceArray.filter(function(item) {
    return item.percent || item.unit;
})
// => [
//  { percent: 123, unit: -1 },
//  { percent: 456, unit: -2 },
//  { percent: 789, unit: -3 }
//];

请注意,这是在删除项目之前检查percent unit是否为零。如果您只需要检查其中一个值,则可以修改过滤器功能(例如return item.percent如果您只想检查percent

答案 3 :(得分:1)

您可以使用过滤器:

var filtered_array = my_arr.filter(function(el) { return el.percent > 0; });

当然你可以包含你喜欢的任何其他条件 - 过滤后的数组包含回调函数返回true的所有元素。