2017-09-06 72 views
0

如何从对象中移除属性(如果其值为零)?如果值为0,则从数组中的对象中移除属性

var row = [{ 
    2013: "0", 
    2014: "0",  
    2015: "95163", 
    carseries: "Sindelfingen" 
},{ 
    2013: "0", 
    2014: "38954", 
    2015: "0", 
    2016: "0", 
    carseries: "Bremen" 
}]; 

输出应该是这样的:

var row = [{ 
    2015: "95163", 
    carseries: "Sindelfingen" 
},{ 
    2014: "38954", 
    carseries: "Bremen" 
}]; 
+1

发布你的代码,你有什么试过? –

+2

1. ['filter()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter)。 2. *没有*关于这是JSON。你拥有的只是一组对象。我修改了标题/描述/标签以反映这一点3. jQuery主要用于修改DOM,因此不需要更改数据结构。 –

回答

2

你需要使用数组迭代器的组合:mapfilterreduce

function clean(obj) { 
 
    return Object.keys(obj) // get own keys 
 
       .filter(function(key) { // keep non '0' values 
 
       return obj[key] !== '0' 
 
       }) 
 
       .reduce(function(out, key) { // recreate object using filtered keys 
 
       out[key] = obj[key] 
 

 
       return out 
 
       }, {}) 
 
} 
 

 
var row = [{ 
 
    2013: "0", 
 
    2014: "0", 
 
    2015: "95163", 
 
    carseries: "Sindelfingen" 
 
}, { 
 
    2013: "0", 
 
    2014: "38954", 
 
    2015: "0", 
 
    2016: "0", 
 
    carseries: "Bremen" 
 
}]; 
 

 
// apply clean function to each element of initial array 
 
console.log(row.map(clean))

1

这工作太:

row.forEach(// loop through your array 
    function(element) { 
     for (key in element) { // for every key in the current object 
      if (element[key] === '0') { // if it's valued to '0' 
       delete element[key]; // remove it from the object 
      } 
     } 
    } 

); 
+0

我测试了性能https://jsperf.com/remove-property-array-iterator-vs-loop,并且你的算法似乎比@Yury Tarabanko更快,这也更容易理解。 – Nolyurn

0

从对象中删除的项目,您可以使用取消,您可以通过使用两个for循环得到你想要的输出=)

var row = [{ 
 
    2013: "0", 
 
    2014: "0",  
 
    2015: "95163", 
 
    carseries: "Sindelfingen" 
 
},{ 
 
    2013: "0", 
 
    2014: "38954", 
 
    2015: "0", 
 
    2016: "0", 
 
    carseries: "Bremen" 
 
}]; 
 

 
for(var i = 0; row[i]; i++){ 
 
    for(var key in row[i]) { 
 
    if(row[i][key] === "0") delete row[i][key]; 
 
    } 
 
} 
 

 
console.log(row);

相关问题