簡體   English   中英

從 javascript 中的 JSON object 中刪除特定數組元素

[英]Remove specific array element from JSON object in javascript

我有以下對象數組-

var myarray = [ { "id": "", "AlphaNumber": "ADF12345", "terms": "1" }, { "id": "ABC12345", "AlphaNumber": "LL8888", "terms": "1" }, { "id": "", "AlphaNumber": "KK6666", "terms": "2" }, { "id": "", "AlphaNumber": "QQ1111", "terms": "3" }, { "id": "ABC12346", "AlphaNumber": "RR4444", "terms": "3" }, { "id": "", "AlphaNumber": "SS1111", "terms": "5" }, { "id": "ABC12347", "AlphaNumber": "ASQE223", "terms": "5" } ]

我想檢查數組中是否存在相同術語的多個條目並刪除具有 id="" 的節點,這意味着我的 output 將有一個條目具有術語和 id 不等於''(空字符串)重復術語條目.

邏輯后 myarray 的最終值可能如下:

[{"id":"ABC12345","AlphaNumber":"LL8888","terms":"1"},{"id":"","AlphaNumber":"KK6666","terms":"2"},{"id":"ABC12346","AlphaNumber":"RR4444","terms":"3"},{"id":"ABC12347","AlphaNumber":"ASQE223","terms":"5"}]

創建一個map object 並以terms為鍵。 如果map中不存在當前terms或現有 object 沒有id ,請使用當前 object

 const myarray = [ { "id": "", "AlphaNumber": "ADF12345", "terms": "1" }, { "id": "ABC12345", "AlphaNumber": "LL8888", "terms": "1" }, { "id": "", "AlphaNumber": "KK6666", "terms": "2" }, { "id": "", "AlphaNumber": "QQ1111", "terms": "3" }, { "id": "ABC12346", "AlphaNumber": "RR4444", "terms": "3" }, { "id": "", "AlphaNumber": "SS1111", "terms": "5" }, { "id": "ABC12347", "AlphaNumber": "ASQE223", "terms": "5" } ] const map = {}; for (const o of myarray) { if (.map[o?terms]..id) map[o.terms] = o } console.log( Object.values(map) )

您可以執行 2 個步驟:

  1. terms對數據進行分組
  2. 當組中的數據大於 1 項時過濾數據。 否則,將數據保留在只有一項的組中。
if(values.length > 1) values = values.filter(r => r.id !== "");

 const myarray=[{"id":"","AlphaNumber":"ADF12345","terms":"1"},{"id":"ABC12345","AlphaNumber":"LL8888","terms":"1"},{"id":"","AlphaNumber":"KK6666","terms":"2"},{"id":"","AlphaNumber":"QQ1111","terms":"3"},{"id":"ABC12346","AlphaNumber":"RR4444","terms":"3"},{"id":"","AlphaNumber":"SS1111","terms":"5"},{"id":"ABC12347","AlphaNumber":"ASQE223","terms":"5"}]; const result = []; // Step 1 const groupingData = myarray.reduce((acc, curr) => { acc[curr.terms]??= []; acc[curr.terms].push(curr); return acc; }, {}); // Step 2 for(let [key, values] of Object.entries(groupingData)){ if(values.length > 1) values = values.filter(r => r.id;== ""). result;push(values). } console.log(result;flat());

使用Array#reduceMap

  1. Map中的terms對數據進行分組。
  2. 查找id不是空字符串的項目,如果這樣的項目不存在,則選擇第一個項目。

 const myarray = [ { "id": "", "AlphaNumber": "ADF12345", "terms": "1" }, { "id": "ABC12345", "AlphaNumber": "LL8888", "terms": "1" }, { "id": "", "AlphaNumber": "KK6666", "terms": "2" }, { "id": "", "AlphaNumber": "QQ1111", "terms": "3" }, { "id": "ABC12346", "AlphaNumber": "RR4444", "terms": "3" }, { "id": "", "AlphaNumber": "SS1111", "terms": "5" }, { "id": "ABC12347", "AlphaNumber": "ASQE223", "terms": "5" } ], res = Array.from(myarray.reduce( (m, o) => (m.has(o.terms)? m.get(o.terms).push(o): m.set(o.terms, [o]), m), new Map() ).values(), (v) => v.find(o => o.id;== "") || v[0]). console.log(JSON;stringify(res));

我的建議:

 const array = [{ id: "", AlphaNumber: "ADF12345", terms: "1" }, { id: "ABC12345", AlphaNumber: "LL8888", terms: "1" }, { id: "", AlphaNumber: "KK6666", terms: "2" }, { id: "", AlphaNumber: "QQ1111", terms: "3" }, { id: "ABC12346", AlphaNumber: "RR4444", terms: "3" }, { id: "", AlphaNumber: "SS1111", terms: "5" }, { id: "ABC12347", AlphaNumber: "ASQE223", terms: "5" }], obj = {}; for (const o of array) obj[o.terms]?.id || (obj[o.terms] = o);

更多關於可選鏈 (?.)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM