簡體   English   中英

如果對象中的屬性不存在,如何從數組中刪除對象

[英]How to remove object from array if property in object do not exist

我有以下數據集合

[{
 id: '1',
 date: '2017-01-01',
 value: 2
 },
 {
 id: '2',
 date: '2017-01-02',
 value: 3
 },
 {
 id: '3',
 value: 3
 },
 id: '4',
 date: '2017-01-02',
 value: 3
 }]

我想刪除任何沒有'date'屬性的對象。 在上面的示例中,應刪除ID為3的對象。

完成的對象應該如下所示

[{
 id: '1',
 date: '2017-01-01',
 value: 2
 },
 {
 id: '2',
 date: '2017-01-02',
 value: 3
 },
 id: '4',
 date: '2017-01-02',
 value: 3
 }]

我試圖用lodash找到並刪除一個未定義的值。 這是行不通的。 該對象看起來與進入的完全一樣。

  _.each(obj, (val) => {
    _.remove(val, value => value['XXX-BUDAT'] === undefined);
   });

我怎樣才能將lodash用於此目的?

提前致謝

您可以使用.filter()Object.keys().includes()

 let input = [ { id: '1', date: '2017-01-01', value: 2}, { id: '2', date: '2017-01-02', value: 3}, { id: '3', value: 3 }, { id: '4', date: '2017-01-02', value: 3 } ] let output = input.filter(obj => Object.keys(obj).includes("date")); console.log(output); 

您可以根據該屬性filter數組,如下所示:

 const initial = [{ id: '1', date: '2017-01-01', value: 2 }, { id: '2', date: '2017-01-02', value: 3 }, { id: '3', value: 3 }, { // this left curly brace was missing!, check that out id: '4', date: '2017-01-02', value: 3 } ]; const finalR = initial.filter((obj) => obj.hasOwnProperty('date') && !!obj.date); console.log(finalR); 

您可以使用Array#filterObject#hasOwnProperty來執行此操作:

var newArray = oldArray.filter(function(obj) {
    return obj.hasOwnProperty("date");
});

可以使用箭頭功能縮短:

var newArray = oldArray.filter(obj => obj.hasOwnProperty("date"));

Lodash解決方案:

var newArray = _.filter(oldArray, obj => _.has(obj, "date"));

例:

 var oldArray = [{id: '1', date: '2017-01-01', value: 2 }, { id: '2', date: '2017-01-02', value: 3 }, { id: '3', value: 3 }, {id: '4', date: '2017-01-02', value: 3}]; var newArray = oldArray.filter(obj => obj.hasOwnProperty("date")); console.log(newArray); 

您可以使用Array.prototype.filter 此外,您可以使用ES6對象分配destructiring使其簡潔:

var data=[{id:'1',date:'2017-01-01',value:2},{id:'2',date:'2017-01-02',value:3},{id:'3',value:3},{id:'4',date:'2017-01-02',value:3}];

var result = data.filter(({date}) => date);

console.log(result)

首先,你的對象數組無效,通過用前面的花括號{包裹最后一個對象元素來修復它。 請參閱Array.prototype.filter()Object.prototype.hasOwnProperty() ,它們會檢查您當前的對象項是否有date鍵? 如果它有,那么它將返回該對象,否則該項將不會返回。

 var array_of_object = [{ id: '1', date: '2017-01-01', value: 2 }, { id: '2', date: '2017-01-02', value: 3 }, { id: '3', value: 3 }, { //missing brace here id: '4', date: '2017-01-02', value: 3 } ]; function filterByValue(item) { return item.hasOwnProperty('date'); } var arrByID = array_of_object.filter(filterByValue); console.log(arrByID); 

這是一個原生的JavaScript解決方案:

 var arr = [ {id: '1', date: '2017-01-01', value: 2}, {id: '2', date: '2017-01-02', value: 3}, {id: '3', value: 3}, {id: '4', date: '2017-01-02', value: 3} ] for(var i = 0; i < arr.length; i++) { if(!arr[i].hasOwnProperty("date")) { arr.splice(i,1); } } console.log(arr); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM