2017-05-08 52 views
0

循環我有一個JSON數組,我需要刪除其ID值是子陣列,這是下的SerialNo 落下。我嘗試了以下方法,但不刪除子數組中的任何條目。刪除的副對象,同時通過使用地圖

let Details = [ 
    { "serialNo": "1", "text": "AAA", "subArray": [{ "id": "1", "name": "geo" }, { "id": "5", "name": "gau" }, { "id": "4", "name": "joi" }] }, 
    { "serialNo": "2", "text": "BBB", "subArray": [{ "id": "7", "name": "rom" }, { "id": "5", "name": "dom" }, { "id": "4", "name": "noi" }] }, 
    { "serialNo": "3", "text": "CCC", "subArray": [{ "id": "1", "name": "glo" }, { "id": "5", "name": "gum" }, { "id": "4", "name": "lom" }] } 
]; 

Details.map((data) => { 
    if (data.serialNo === "1") { 
     data.subArray.map((subDetails) => { 
      if (subDetails.id === "5") { 
       delete data.subArray[subDetails]; 
      } 
     }) 
    } 
}) 

回答

1

我不知道爲什麼你明確的想使用map功能。但以下工作:

let Details = [ 
 
     { "serialNo": "1", "text": "AAA", "subArray": [{ "id": "1", "name": "geo" }, { "id": "5", "name": "gau" }, { "id": "4", "name": "joi" }] }, 
 
     { "serialNo": "2", "text": "BBB", "subArray": [{ "id": "7", "name": "rom" }, { "id": "5", "name": "dom" }, { "id": "4", "name": "noi" }] }, 
 
     { "serialNo": "3", "text": "CCC", "subArray": [{ "id": "1", "name": "glo" }, { "id": "5", "name": "gum" }, { "id": "4", "name": "lom" }] } 
 
    ]; 
 

 
Details = Details.map(function (data) { 
 
    if (data.serialNo === "1") { 
 
     data.subArray = data.subArray.filter(function (sa) { 
 
      return (sa.id !== "5"); 
 
     }); 
 
    } 
 
    return data; 
 
}); 
 

 
console.log(Details);

+0

我應該去了過濾器,但我試圖使它與刪除方法一起工作 – Intruder

1

第一個問題是,你沒有從map函數返回任何東西。第二個問題是data.subArray[subDetails]未定義,subDetails是一個對象而不是data.subArray數組中的索引。您可以使用mapfilter的組合來完成此操作,而不是使用delete

let Details = [ 
 
     { "serialNo": "1", "text": "AAA", "subArray": [{ "id": "1", "name": "geo" }, { "id": "5", "name": "gau" }, { "id": "4", "name": "joi" }] }, 
 
     { "serialNo": "2", "text": "BBB", "subArray": [{ "id": "7", "name": "rom" }, { "id": "5", "name": "dom" }, { "id": "4", "name": "noi" }] }, 
 
     { "serialNo": "3", "text": "CCC", "subArray": [{ "id": "1", "name": "glo" }, { "id": "5", "name": "gum" }, { "id": "4", "name": "lom" }] } 
 
    ]; 
 

 
    Details.map((data) => { 
 
     if (data.serialNo === "1") { 
 
      data.subArray = data.subArray.filter((subDetails) => { 
 
       return subDetails.id !== "5"; 
 
      }) 
 
     } 
 
     return data; 
 
    }); 
 

 
console.log(Details);

如果你想堅持map你需要做的是返回undefinedsubDetails.id5

let Details = [ 
 
      { "serialNo": "1", "text": "AAA", "subArray": [{ "id": "1", "name": "geo" }, { "id": "5", "name": "gau" }, { "id": "4", "name": "joi" }] }, 
 
      { "serialNo": "2", "text": "BBB", "subArray": [{ "id": "7", "name": "rom" }, { "id": "5", "name": "dom" }, { "id": "4", "name": "noi" }] }, 
 
      { "serialNo": "3", "text": "CCC", "subArray": [{ "id": "1", "name": "glo" }, { "id": "5", "name": "gum" }, { "id": "4", "name": "lom" }] } 
 
     ]; 
 

 
Details.map((data) => { 
 
    if (data.serialNo === "1") { 
 
     data.subArray = data.subArray.filter((subDetails) => { 
 
      return subDetails.id === "5" ? undefined : subDetails; 
 
     }) 
 
    } 
 
    return data; 
 
}); 
 

 
console.log(Details);

1

一個map加上對象的構造函數:

const arr = [ 
 
     { "serialNo": "1", "text": "AAA", "subArray": [{ "id": "1", "name": "geo" }, { "id": "5", "name": "gau" }, { "id": "4", "name": "joi" }] }, 
 
     { "serialNo": "2", "text": "BBB", "subArray": [{ "id": "7", "name": "rom" }, { "id": "5", "name": "dom" }, { "id": "4", "name": "noi" }] }, 
 
     { "serialNo": "3", "text": "CCC", "subArray": [{ "id": "1", "name": "glo" }, { "id": "5", "name": "gum" }, { "id": "4", "name": "lom" }] } 
 
    ]; 
 

 
const s = 1, id = 5; // conditions 
 

 
const r = arr.map(e => (e.serialNo == s) 
 
    ? Object.assign(e, {'subArray': e.subArray.filter(a => a.id != id)}) 
 
    : e); 
 
    
 
console.log(JSON.stringify(r, null, 2));

Object.assign互換舊subArray新過濾的一個。