У меня есть следующий набор данных
[{
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'. В приведенном выше примере объект с идентификатором 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 деструктурируя, чтобы сделать его кратким:
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);
hasOwnProperty
.