如何在Angular中按服务器分组

huangapple go评论123阅读模式
英文:

How to group by server in Angular

问题

这是代码:

list.component.ts

  1. data = [
  2. {
  3. "id": 19,
  4. "server": "Server 1",
  5. "dl": "35.88 Mbit/s",
  6. "ul": "46.76 Mbit/s",
  7. },
  8. {
  9. "id": 30,
  10. "server": "Server 1",
  11. "dl": "45.06 Mbit/s",
  12. "ul": "48.25 Mbit/s",
  13. },
  14. {
  15. "id": 26,
  16. "server": "Server 1",
  17. "dl": "47.96 Mbit/s",
  18. "ul": "47.89 Mbit/s",
  19. }
  20. ]

如何将Server 1分组?

输出应为:

  1. {
  2. server: 'Server 1',
  3. data: [
  4. {
  5. "id": 19,
  6. "dl": "35.88 Mbit/s",
  7. "ul": "46.76 Mbit/s",
  8. },
  9. {
  10. "id": 30,
  11. "dl": "45.06 Mbit/s",
  12. "ul": "48.25 Mbit/s",
  13. },
  14. {
  15. "id": 26,
  16. "dl": "47.96 Mbit/s",
  17. "ul": "47.89 Mbit/s",
  18. }
  19. ]
  20. }
英文:

here's the code:

list.component.ts

  1. data = [ {
  2. "id": 19,
  3. "server": "Server 1",
  4. "dl": "35.88 Mbit/s",
  5. "ul": "46.76 Mbit/s",
  6. },
  7. {
  8. "id": 30,
  9. "server": "Server 1",
  10. "dl": "45.06 Mbit/s",
  11. "ul": "48.25 Mbit/s",
  12. },
  13. {
  14. "id": 26,
  15. "server": "Server 1",
  16. "dl": "47.96 Mbit/s",
  17. "ul": "47.89 Mbit/s",
  18. } ]

how to group the Server 1?

the output should be

  1. {
  2. server: 'Server 1',
  3. data: [
  4. {
  5. "id": 19,
  6. "dl": "35.88 Mbit/s",
  7. "ul": "46.76 Mbit/s",
  8. },
  9. {
  10. "id": 30,
  11. "dl": "45.06 Mbit/s",
  12. "ul": "48.25 Mbit/s",
  13. },
  14. {
  15. "id": 26,
  16. "dl": "47.96 Mbit/s",
  17. "ul": "47.89 Mbit/s",
  18. }
  19. ]
  20. }

答案1

得分: 1

你可以使用 array.reduce() 来按 server 分组,并使用 Spread 语法获取 other 对象字段:

  1. let data = [
  2. {
  3. "id": 19,
  4. "server": "Data1",
  5. "dl": "35.88 Mbit/s",
  6. "ul": "46.76 Mbit/s",
  7. },
  8. {
  9. "id": 30,
  10. "server": "Data1",
  11. "dl": "45.06 Mbit/s",
  12. "ul": "48.25 Mbit/s",
  13. },
  14. {
  15. "id": 26,
  16. "server": "Data1",
  17. "dl": "47.96 Mbit/s",
  18. "ul": "47.89 Mbit/s",
  19. }
  20. ];
  21. let result = data.reduce((state, current) => {
  22. let { server, ...others } = current;
  23. if (state[server]) {
  24. state[server].push(others);
  25. } else {
  26. state[server] = [others];
  27. }
  28. return state;
  29. }, {});
  30. console.log(result);
英文:

You can use array.reduce() to group by server and Spread syntax to get other object fields:

<!-- begin snippet: js hide: false console: true babel: false -->

<!-- language: lang-js -->

  1. let data = [ {
  2. &quot;id&quot;: 19,
  3. &quot;server&quot;: &quot;Data1&quot;,
  4. &quot;dl&quot;: &quot;35.88 Mbit/s&quot;,
  5. &quot;ul&quot;: &quot;46.76 Mbit/s&quot;,
  6. },
  7. {
  8. &quot;id&quot;: 30,
  9. &quot;server&quot;: &quot;Data1&quot;,
  10. &quot;dl&quot;: &quot;45.06 Mbit/s&quot;,
  11. &quot;ul&quot;: &quot;48.25 Mbit/s&quot;,
  12. },
  13. {
  14. &quot;id&quot;: 26,
  15. &quot;server&quot;: &quot;Data1&quot;,
  16. &quot;dl&quot;: &quot;47.96 Mbit/s&quot;,
  17. &quot;ul&quot;: &quot;47.89 Mbit/s&quot;,
  18. } ]
  19. let result = data.reduce((state,current) =&gt; {
  20. let {server, ...others} = current;
  21. if(state[server]){
  22. state[server].push(others);
  23. } else {
  24. state[server] = [others];
  25. }
  26. return state;
  27. }, {});
  28. console.log(result);

<!-- end snippet -->

答案2

得分: 0

你还可以使用forEach来对数据进行分组。

  1. let data = [
  2. {
  3. "id": 19,
  4. "server": "Data1",
  5. "dl": "35.88 Mbit/s",
  6. "ul": "46.76 Mbit/s",
  7. },
  8. {
  9. "id": 30,
  10. "server": "Data1",
  11. "dl": "45.06 Mbit/s",
  12. "ul": "48.25 Mbit/s",
  13. },
  14. {
  15. "id": 26,
  16. "server": "Data1",
  17. "dl": "47.96 Mbit/s",
  18. "ul": "47.89 Mbit/s",
  19. },
  20. {
  21. "id": 36,
  22. "server": "Data2",
  23. "dl": "41.98 Mbit/s",
  24. "ul": "41.82 Mbit/s",
  25. }
  26. ];
  27. const groupedArray = (arr) => {
  28. let newArray = {};
  29. data.forEach(obj => {
  30. if(newArray[obj['server']] == undefined){
  31. newArray[obj['server']] = [ obj ];
  32. } else{
  33. newArray[obj['server']].push(obj);
  34. }
  35. });
  36. return newArray;
  37. }
  38. let newData = groupedArray(data);
  39. console.log(newData);
英文:

You can also group data using forEach.

  1. let data = [
  2. {
  3. &quot;id&quot;: 19,
  4. &quot;server&quot;: &quot;Data1&quot;,
  5. &quot;dl&quot;: &quot;35.88 Mbit/s&quot;,
  6. &quot;ul&quot;: &quot;46.76 Mbit/s&quot;,
  7. },
  8. {
  9. &quot;id&quot;: 30,
  10. &quot;server&quot;: &quot;Data1&quot;,
  11. &quot;dl&quot;: &quot;45.06 Mbit/s&quot;,
  12. &quot;ul&quot;: &quot;48.25 Mbit/s&quot;,
  13. },
  14. {
  15. &quot;id&quot;: 26,
  16. &quot;server&quot;: &quot;Data1&quot;,
  17. &quot;dl&quot;: &quot;47.96 Mbit/s&quot;,
  18. &quot;ul&quot;: &quot;47.89 Mbit/s&quot;,
  19. },
  20. {
  21. &quot;id&quot;: 36,
  22. &quot;server&quot;: &quot;Data2&quot;,
  23. &quot;dl&quot;: &quot;41.98 Mbit/s&quot;,
  24. &quot;ul&quot;: &quot;41.82 Mbit/s&quot;,
  25. }
  26. ];
  27. const groupedArray = (arr) =&gt; {
  28. let newArray = {};
  29. data.forEach(obj =&gt; {
  30. if(newArray[obj[&#39;server&#39;]] == undefined){
  31. newArray[obj[&#39;server&#39;]] = [ obj ];
  32. } else{
  33. newArray[obj[&#39;server&#39;]].push(obj);
  34. }
  35. });
  36. return newArray;
  37. }
  38. let newData = groupedArray(data);
  39. console.log(newData);

huangapple
  • 本文由 发表于 2020年1月3日 13:50:48
  • 转载请务必保留本文链接:https://go.coder-hub.com/59573770.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定