[英]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#filter
和Object#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.