2017-09-06 9 views
0

値がゼロの場合、オブジェクトからプロパティを削除するにはどうすればよいですか?値が0の場合、配列内のオブジェクトからプロパティを削除する

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

出力は次のようになります。mapfilter、およびreduce

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)。 *これについての何もJSONはありません。あなたが持っているものは、単にオブジェクトの配列です。これを反映するためにtitle/description/tagsを修正しました.jQueryは主にDOMを修正するためのもので、データ構造を変更する必要はありません。 –

答えて

2

あなたは、配列の反復子の組み合わせを使用する必要があります。

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

あなたはCANCELを使用することができますし、ループ= FOR 2を使用することにより、必要出力を得ることができ、オブジェクトから項目を削除します)

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);

関連する問題