0
如何在給定對象圖中遞歸子數組並刪除項而不知道數組名?我所有的對象有三個審計領域:從對象圖(JavaScript)中刪除兒童
{
id, // String
userId, // String
createdDate, // Date
updatedDate, // Date - OPTIONAL
deletedDate // Date - OPTIONAL
}
如果再deletedDate
屬性存在的項目應該從陣列中刪除。
實施例:
var companies = [
{
id : 'abc123',
name : 'ABC, Inc.',
employees: [
{
id : 'abc-01',
name : 'Joe',
createdDate: '1/1/2015',
userId : 'asdf87612'
},
{
id : 'abc-02',
name : 'Mike',
createdDate: '1/1/2015',
deletedDate: '1/2/2015'
userId : 'asdf87612'
}
]
createdDate: '1/1/2015',
userId : 'asdf87612'
}
];
功能需要足夠,以1通用)發現是數組的所有屬性,以及2)遞歸陣列地發現,具有deletedDate
屬性設定項目,以及3)刪除如果已設置deletedDate
值,則返回數組中的項目。
在上面的例子中,Employee「Mike」將從數組中移除。
我一直在嘗試使用Lodash,但一直沒有成功......並且剛剛在試驗時刪除了我的測試文件。我會再次重新創建它,所以這些人都知道我並不想懈怠。
原始方法
這是它我第一次(相當醜陋的)嘗試:
function removeDeleted (itemOrArray) {
if (itemOrArray == null || typeof itemOrArray == 'undefined') { return itemOrArray; }
var result = [],
items = (itemOrArray instanceof Array) ? itemOrArray : [itemOrArray];
for (var i = 0; i < items.length; i += 1) {
if (items[i].dateDeleted) { continue; }
for (var k = 0; k < Object.keys(items[i]).length; k += 1) {
var key = Object.keys(items[i])[k];
if (items[i][key] instanceof Array) {
items[i][key] = removeDeleted(items[i].key);
}
}
result.push(items[i]);
}
return result;
}
有什麼辦法徹底刪除子陣列,如果所有項目被拆除?那是我陷入困境的地方。 –
@ G.Deward,是的,編輯我的答案與解決方案(使用omitBy以及) –
男人,你真棒。我無法告訴你我花了多長時間。 –