如何循环遍历一个数组并以对象形式输出结果

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

How to loop through an array and get output in object

问题

我正在从我的数据库获取数据,并希望按需循环。

我从我的数据库获取到对象数组,我希望将其转换为带有一些更改的对象。

我的数据:

  1. Data= [
  2. {
  3. "Menu": "Menu1",
  4. "SubMenu": "dash",
  5. "PATH": "Path1"
  6. },
  7. {
  8. "Menu": "Menu2",
  9. "SubMenu": "SubMenu1",
  10. "PATH": "path2"
  11. },
  12. {
  13. "menu": "menu2",
  14. "SubMenu": "SubMenu2",
  15. "PATH": "path3"
  16. },
  17. {
  18. "Menu": "menu2",
  19. "Submenu": "SubMenu3",
  20. "PATH": "Path4"
  21. }
  22. ]

我想要将其转换成以下格式:

  1. {
  2. "menu1": [
  3. {
  4. "SubMenu": "dash",
  5. "PATH": "path1"
  6. }
  7. ],
  8. "menu2": [
  9. {
  10. "SubMenu": "subMenu1",
  11. "PATH": "Path2"
  12. },
  13. {
  14. "SubMenu": "Submenu2",
  15. "PATH": "Path3"
  16. },
  17. {
  18. "type": "SubMenu3",
  19. "link": "Path4"
  20. }
  21. ]
  22. }
  1. const newArray= Data.map(element => element.Menu);
  2. console.log(newArray);

希望这些信息对你有所帮助。

英文:

I am getting Data from my db And I want to loop as required

I am getting array of objects from my data base and I want to convert it to objects with some changes

My Data

  1. Data= [
  2. {
  3. "Menu": "Menu1",
  4. "SubMenu": "dash",
  5. "PATH": "Path1"
  6. },
  7. {
  8. "Menu": "Menu2",
  9. "SubMenu": "SubMenu1",
  10. "PATH": "path2"
  11. },
  12. {
  13. "menu": "menu2",
  14. "SubMenu": "SubMenu2",
  15. "PATH": "path3"
  16. },
  17. {
  18. "Menu": "menu2",
  19. "Submenu": "SubMenu3",
  20. "PATH": "Path4"
  21. }
  22. ]

I want to convert it into like below -:

  1. {
  2. "menu1": [
  3. {
  4. "SubMenu": "dash",
  5. "PATH": "path1"
  6. }
  7. ],
  8. "menu2": [
  9. {
  10. "SubMenu": "subMenu1",
  11. "PATH": "Path2"
  12. },
  13. {
  14. "SubMenu": "Submenu2",
  15. "PATH": "Path3"
  16. },
  17. {
  18. "type": "SubMenu3",
  19. "link": "Path4"
  20. }
  21. ]
  22. }
  23. const newArray= Data.map(element => element.Menu);
  24. console.log(newArray);

答案1

得分: 2

你可以使用 Array.reduce()

  1. var Data = [{
  2. "Menu": "Menu1",
  3. "SubMenu": "dash",
  4. "PATH": "Path1"
  5. },
  6. {
  7. "Menu": "Menu2",
  8. "SubMenu": "SubMenu1",
  9. "PATH": "path2"
  10. },
  11. {
  12. "Menu": "Menu2",
  13. "SubMenu": "SubMenu2",
  14. "PATH": "path3"
  15. },
  16. {
  17. "Menu": "Menu2",
  18. "SubMenu": "SubMenu3",
  19. "PATH": "Path4"
  20. }
  21. ];
  22. var res = Data.reduce((acc, item) => {
  23. var accObj = {
  24. Submenu: item.SubMenu,
  25. PATH: item.PATH
  26. };
  27. if (acc[item.Menu]) {
  28. acc[item.Menu].push(accObj);
  29. } else {
  30. acc[item.Menu] = [accObj];
  31. }
  32. return acc;
  33. }, {});
  34. console.log(res);
英文:

You can use Array.reduce():

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

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

  1. var Data = [{
  2. &quot;Menu&quot;: &quot;Menu1&quot;,
  3. &quot;SubMenu&quot;: &quot;dash&quot;,
  4. &quot;PATH&quot;: &quot;Path1&quot;
  5. },
  6. {
  7. &quot;Menu&quot;: &quot;Menu2&quot;,
  8. &quot;SubMenu&quot;: &quot;SubMenu1&quot;,
  9. &quot;PATH&quot;: &quot;path2&quot;
  10. },
  11. {
  12. &quot;Menu&quot;: &quot;Menu2&quot;,
  13. &quot;SubMenu&quot;: &quot;SubMenu2&quot;,
  14. &quot;PATH&quot;: &quot;path3&quot;
  15. },
  16. {
  17. &quot;Menu&quot;: &quot;Menu2&quot;,
  18. &quot;SubMenu&quot;: &quot;SubMenu3&quot;,
  19. &quot;PATH&quot;: &quot;Path4&quot;
  20. }
  21. ];
  22. var res = Data.reduce((acc, item) =&gt; {
  23. var accObj = {
  24. Submenu: item.SubMenu,
  25. PATH: item.PATH
  26. };
  27. if(acc[item.Menu]) {
  28. acc[item.Menu].push(accObj);
  29. } else {
  30. acc[item.Menu] = [accObj];
  31. }
  32. return acc;
  33. }, {});
  34. console.log(res);

<!-- end snippet -->

答案2

得分: 0

你使用 map 是正确的方向,但在迭代之前应该初始化一个对象(result = {}),然后随着迭代的进行逐步填充它。然后,你将不再使用 .map,而应该使用 .forEach,因为你不会使用输出。

  1. const result = {}
  2. Data.forEach(item => result[item.Menu] = {
  3. //...
  4. })
英文:

You're in the right direction with map, however you should initialise an object before you iterate (result = {}) and populate it as you go. You'd then not use .map but .forEach because you won't be using the output.

  1. const result = {}
  2. Data.forEach(item =&gt; result[item.Menu] = {
  3. //...
  4. })
  5. </details>
  6. # 答案3
  7. **得分**: 0
  8. 输出结果:
  9. ```json
  10. {
  11. Menu1: [{
  12. SubMenu: 'dash',
  13. PATH: 'Path1'
  14. }],
  15. Menu2: [{
  16. SubMenu: 'SubMenu1',
  17. PATH: 'path2'
  18. },
  19. {
  20. SubMenu: 'SubMenu2',
  21. PATH: 'path3'
  22. },
  23. {
  24. Submenu: 'SubMenu3',
  25. PATH: 'Path4'
  26. }
  27. ]
  28. }
英文:

Try for this:

  1. var obj = {};
  2. Data.forEach(function(element){
  3. var menu = element[&quot;Menu&quot;];
  4. delete element[&quot;Menu&quot;];
  5. if(Object.keys(obj).includes(menu)){
  6. obj[menu].push(element)
  7. } else {
  8. obj[menu] = [element]
  9. }
  10. })
  11. console.log(&quot;oo&quot;, obj);

OUTPUT:

  1. {
  2. Menu1: [{
  3. SubMenu: &#39;dash&#39;,
  4. PATH: &#39;Path1&#39;
  5. }],
  6. Menu2: [{
  7. SubMenu: &#39;SubMenu1&#39;,
  8. PATH: &#39;path2&#39;
  9. },
  10. {
  11. SubMenu: &#39;SubMenu2&#39;,
  12. PATH: &#39;path3&#39;
  13. },
  14. {
  15. Submenu: &#39;SubMenu3&#39;,
  16. PATH: &#39;Path4&#39;
  17. }
  18. ]
  19. }

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

发表评论

匿名网友

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

确定