簡體   English   中英

僅使用Array.prototype.map()和Array.prototype.filter()可獲得以下結果

[英]Use Array.prototype.map() and Array.prototype.filter() only to achieve the following results

我有這個對象:

const data = [
  { "key": "Arnav", "value": "J Access" },
  { "key": "Amit", "value": "UP Access" },
  { "key": "Amit", "value": "UP Access" },
  { "key": "Amit", "value": "UP Access01" },
  { "key": "Amit", "value": "UP Access02" },
  { "key": "Arnav", "value": "J Access01" },
  { "key": "John", "value": "EUP Access" },
  { "key": "John", "value": "EUP Access1" },    
  { "key": "Arnav", "value": "J Access02" }
];

我只想使用map和filter將其轉換為該對象:

const result = [
  { "key": "Arnav", "value":["J Access","J Access02", "J Access01"]},
  { "key": "Amit", "value": ["UP Access","UP Access01","UP Access02"]},
  { "key": "John", "value": ["EUP Access", "EUP Access1"]}
];

即唯一的鍵和值對(數組)

理想情況下,你應該使用Array.prototype.reduce到組的項目,首先發現,如果該項目已存在,或者不使用Array.prototype.findIndex再處理使用重復的項目Set

如果存在,只需將value添加到現有的分組數組中(在檢查重復項之前),否則在分組/累加數組中添加一個新條目:

 const data = [ { "key": "Arnav", "value": "J Access" }, { "key": "Amit", "value": "UP Access" }, { "key": "Amit", "value": "UP Access" }, { "key": "Amit", "value": "UP Access01" }, { "key": "Amit", "value": "UP Access02" }, { "key": "Arnav", "value": "J Access01" }, { "key": "John", "value": "EUP Access" }, { "key": "John", "value": "EUP Access1" }, { "key": "Arnav", "value": "J Access02" } ]; const grouped = data.reduce((acc, ele) => { const idx = acc.findIndex(obj => obj.key === ele.key); if(idx >= 0){ acc[idx].value = [...new Set(acc[idx].value).add(ele.value)]; }else{ acc.push({key: ele.key, value: [ele.value]}); } return acc; }, []); console.log(grouped); 

您可以使用Set with map來獲取唯一項列表。 然后,您可以使用過濾器和映射,基於這些項目構建一個新對象,如下所示:

 const data = [ { "key": "Arnav", "value": "J Access" }, { "key": "Amit", "value": "UP Access" }, { "key": "Amit", "value": "UP Access" }, { "key": "Amit", "value": "UP Access01" }, { "key": "Amit", "value": "UP Access02" }, { "key": "Arnav", "value": "J Access01" }, { "key": "John", "value": "EUP Access" }, { "key": "John", "value": "EUP Access1" }, { "key": "Arnav", "value": "J Access02" } ]; let result = [...new Set(data.map(i => i.key))] .map(key => ({ key, value: [...data.filter(i => i.key == key).map(i => i.value)] })) console.log(result) 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

您可以在組上添加一些邏輯和閉包,然后按同一組的第一個找到的條目進行過濾。

 const data = [{ "key": "Arnav", value: "J Access" }, { key: "Amit", value: "UP Access" }, { key: "Amit", value: "UP Access" }, { key: "Amit", value: "UP Access01" }, { key: "Amit", value: "UP Access02" }, { key: "Arnav", value: "J Access01" }, { key: "John", value: "EUP Access" }, { key: "John", value: "EUP Access1" }, { key: "Arnav", value: "J Access02" }], result = data .map((hash => ({ key, value }) => ((hash[key] = (hash[key] || [])).push(value), { key, value: hash[key] }))({})) .filter((s => ({ key }) => !s.has(key) && s.add(key))(new Set)) console.log(result); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

暫無
暫無

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

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