2017-09-04 102 views
-1

我有一些嵌套在JSON中的項目。刪除嵌套在JSON中的項目

我有我想要刪除的項目的ID。

我該怎麼做?例如,刪除約翰用他使用JavaScript

這裏的1號是JSON的一個例子 -

[ 
    [ 
     { 
     "ID":1, 
     "firstname":"John", 
     "surname":"Doe", 
     "email":"[email protected]" 
     } 
    ], 
    [ 
     { 
     "ID":2, 
     "firstname":"Jane", 
     "surname":"Doe", 
     "email":"[email protected]" 
     } 
    ] 
] 
+2

爲什麼每個對象都在自己的數組中? –

+1

到目前爲止您嘗試過什麼? –

+4

你有什麼問題?從任何地方(你沒有說)讀取JSON它被存儲?解析JSON?尋找你想在數組中刪除的對象?從數組中刪除該對象?將數組轉換回JSON?無論從哪裏出發,都可以將它儲存起來?就目前而言,您的問題有點不明確,並且顯示出明顯缺乏研究成果。 – Quentin

回答

0

可以使用反向for循環,並在與同ID元素被發現使用創建遞歸函數拼接去除它。

var data = [[{"ID":1,"firstname":"John","surname":"Doe","email":"[email protected]"},{"ID":1,"firstname":"John","surname":"Doe","email":"[email protected]"},[[[{"ID":3,"firstname":"John","surname":"Doe","email":"[email protected]"}]]]],{"ID":1,"firstname":"Jane","surname":"Doe","email":"[email protected]"},[{"ID":2,"firstname":"Jane","surname":"Doe","email":"[email protected]"}]] 
 

 
let findAndDelete = function(data, id) { 
 
    var length = data.length; 
 
    for(var i = length; i >= 0; i--) { 
 
    if(typeof data[i] == 'object') { 
 
     if(data[i].ID == id) data.splice(i, 1); 
 
     if(Array.isArray(data[i])) findAndDelete(data[i], id); 
 
    } 
 
    } 
 
} 
 

 
findAndDelete(data, 1); 
 
console.log(data)

更新:您還可以使用filter()find()

var data = [[{"ID":1,"firstname":"John","surname":"Doe","email":"[email protected]"}],[{"ID":2,"firstname":"Jane","surname":"Doe","email":"[email protected]"}]] 
 

 
var result = data.filter(function(e) { 
 
    return !e.find(o => o.ID == 1); 
 
}) 
 

 
console.log(result)

+0

這幾乎是完美的,但它留下了一個空陣列,我需要整個陣列不僅刪除內容 – Clint

+0

如果在同一陣列中還有其他元素,該怎麼辦? –

+0

也許我不清楚我的問題。 如果它有該ID,則需要輸入整個條目。 這將刪除數據並在對象中留下空數組 – Clint

0

這將根據ID從您的JSON中刪除對象。

function removeItem(itemID,jsonStr) { 
    var jsonObj = JSON.parse(jsonStr); 
    var compactJsonObj = []; 

    for (var i = 0; i < jsonObj.length; ++i) { 
     if (jsonObj[i][0].ID === itemID) { 
      delete jsonObj[i]; 
     } 
    } 

    for (var i = 0; i < jsonObj.length; ++i) { 
     if (jsonObj[i]) { 
      compactJsonObj.push(jsonObj[i]); 
     } 
    } 

    return JSON.stringify(compactJsonObj); 
}