var array = [
{
key: 'value',
subArray: [{ key: 'value', subArray: [{}] }]
},
{
key: 'value',
subArray: [{ key: 'value', subArray: [{ key: 'value', subArray: [] }] }]
},
{ key: 'value', subArray: [] }
];
在我的应用程序中,我有对象数组。每个对象都有包含另一个数组的字段,该字段可以包含另一个包含数组的对象,依此类推。在某些情况下,对象可能为空。我需要写函数,该函数将遍历所有数组,找到emty对象并将其删除。我该如何实现?
答案 0 :(得分:1)
我认为解决方案是使用递归。
var array = [
{
key: 'value',
subArray: [{ key: 'value', subArray: [{}] }]
},
{
key: 'value',
subArray: [{ key: 'value', subArray: [{ key: 'value', subArray: [] }] }]
},
{ key: 'value', subArray: [] }
];
function lookup(subArr) {
subArr.forEach((sa, i) => {
if (Object.keys(sa).length == 0) {
delete subArr[i];
} else {
lookup(sa.subArray);
}
});
}
array.forEach(a => {
lookup(a.subArray);
});
console.log(array);
答案 1 :(得分:0)
尝试
for (var i = 0; i < array.length; i++ ) {
if (array[i].subArray.length != 0) {
if (Object.keys(array[i].subArray).length)) {
delete Object.keys(array[i].subArray
}
}
}
可能对您有用
答案 2 :(得分:0)
尝试这样。希望它将有助于找出解决方案:
for (var i = 0; i < array.length; i++ ){
if(array[i].subArray)
{
removeEmptyItems(array[i].subArray);
}
}
removeEmptyItems(item: any) {
if(item.length == 0){
delete item;
return;
}
if (item.subArray) {
removeEmptyItems(item.subArray);
}
}
答案 3 :(得分:0)
如果要查找空对象并将其删除(换句话说,将subArray: [{}]
转到subArray: []
),则可以使用递归函数来实现,该函数将所有出现的数组替换为一个空对象空数组:
var array = [
{
key: 'value',
subArray: [{ key: 'value', subArray: [{}] }]
},
{
key: 'value',
subArray: [{ key: 'value', subArray: [{ key: 'value', subArray: [] }] }]
},
{ key: 'value', subArray: [] }
];
function removeEmptyObjects(obj) {
var objCopy = Object.assign({}, obj);
Object.keys(objCopy).forEach(key => {
if (!Array.isArray(objCopy[key])) return;
var containsEmptyObject = objCopy[key].length === 1 && typeof objCopy[key][0] === 'object' && Object.keys(objCopy[key][0]).length === 0;
objCopy[key] = containsEmptyObject ? [] : objCopy[key].map(removeEmptyObjects);
});
return objCopy;
}
var result = array.map(removeEmptyObjects);
console.log(JSON.stringify(result, null, 2));