[英]JavaScript: Remove null/undefined/empty attributes from an array of objects
我有一个对象数组,想要删除空/未定义/空元素...
例子:-
[
{
'Name': 'Sorav',
'Phone': '9090909090',
'Class': 'A',
'Age': '25'
},
{
'Name': 'Gaurav',
'Phone': '',
'Class': 'A',
'Age': '25'
},
{
'Name': 'Stack',
'Phone': '',
'Class': 'A',
'Age': null
}
]
预期输出:-
[
{
'Name': 'Sorav',
'Phone': '9090909090',
'Class': 'A',
'Age': '25'
},
{
'Name': 'Gaurav',
'Class': 'A',
'Age': '25'
},
{
'Name': 'Stack',
'Class': 'A'
}
]
您可以使用 lodash 的pickBy
:
let data = [ { 'Name': 'Sorav', 'Phone': '9090909090', 'Class': 'A', 'Age': '25' }, { 'Name': 'Gaurav', 'Phone': '', 'Class': 'A', 'Age': '25' }, { 'Name': 'Stack', 'Phone': '', 'Class': 'A', 'Age': null } ]; data = _.map(data, e => _.pickBy(e, _.identity) ); console.log(data);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js"></script>
另一个使用 JavaScript .reduce
解决方案:
let data = [ { 'Name': 'Sorav', 'Phone': '9090909090', 'Class': 'A', 'Age': '25' }, { 'Name': 'Gaurav', 'Phone': '', 'Class': 'A', 'Age': '25' }, { 'Name': 'Stack', 'Phone': '', 'Class': 'A', 'Age': null } ]; data = data.map(item => Object.entries(item).reduce((acc, [key, value]) => { if (value) { acc[key] = value; } return acc; }, {}) ); console.log(data);
您可以通过循环遍历对象数组并检查每个键中的值是否为空来执行此操作:
const objs = [
{
'Name': 'Sorav',
'Phone': '9090909090',
'Class': 'A',
'Age': '25'
},
{
'Name': 'Gaurav',
'Phone': '',
'Class': 'A',
'Age': '25'
},
{
'Name': 'Stack',
'Phone': '',
'Class': 'A',
'Age': null
}
]
for (let i = 0; i < objs.length; i++ ) {
for (el in objs[i]) {
if (objs[i][el] === null || objs[i][el] === '')
delete objs[i][el]
}
}
console.log(objs);
结果将是:
[
{ Name: 'Sorav', Phone: '9090909090', Class: 'A', Age: '25' },
{ Name: 'Gaurav', Class: 'A', Age: '25' },
{ Name: 'Stack', Class: 'A' }
]
如果数据来自 JSON 字符串,则可以使用JSON.parse
或JSON.stringify
对其进行过滤:
var json = JSON.stringify( [ { 'Name': 'Sorav', 'Phone': '9090909090', 'Class': 'A', 'Age': '25' }, { 'Name': 'Gaurav', 'Phone': '', 'Class': 'A', 'Age': '25' }, { 'Name': 'Stack', 'Phone': '', 'Class': 'A', 'Age': null } ] ) var result = JSON.parse(json, (k, v) => v === '' || v === null ? void 0 : v) console.log( result )
假设该数组称为array
:
const filtered = array.map(elem => {
for (const key of Object.keys(elem)) {
if (!elem[key]) {
delete elem[key]
}
}
return elem
}).filter(elem => Object.keys(elem).length > 0)
您还可以使用reduce
来组合map
和filter
步骤,并避免对array
进行第二次迭代
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.