Преобразовать вложенный json объект в reactJS? - PullRequest
1 голос
/ 20 апреля 2020

Я играл с json объектами и использовал ReactJS. Один из объектов json, представленный переменной 'res'. Как мне преобразовать «Res» в «B». Я также получаю json объект 'res' от API.

Я ответил на мою проблему по этой ссылке: https://codesandbox.io/s/epic-leaf-sznhx?file= / src / App. js

const [res, setResult] = useState();
  useEffect(() => {
    (async () => {
      axios.get("https://corona.lmao.ninja/v2/countries").then(response => {
        setResult(response.data);
      });
    })();
  }, []);

Как мне преобразовать это:


        const a = 
        {
          "menu_1": {
            "id": "1",
            "menuitem": [{
              "value": "0",
              "onclick": "0()"
            }, {
              "value": "0",
              "onclick": "0()"
            }]
          },
          "menu_2": {
            "id": "2",
            "menuitem": [{
              "value": "2",
              "onclick": "2()"
            }]
          }
        }

в этот json объект:

const b =

    {
      "popup": {
        "menuitem": [
          {
            "value": "0",
            "onclick": "0()"
          },
          {
            "value": "0",
            "onclick": "0()"
          },
          {
            "value": "2",
            "onclick": "2()"
          }
        ]
      }
    }

Ответы [ 2 ]

3 голосов
/ 20 апреля 2020

Вы можете сделать что-то вроде следующего:

const a = {
  menu_1: {
    id: "1",
    menuitem: [{
      value: "1",
      onclick: "1()",
    }, ],
  },
  menu_2: {
    id: "2",
    menuitem: [{
      value: "2",
      onclick: "2()",
    }, ],
  },
};

let b = Object.keys(a).reduce(
  (p, c) => {
    for (let item of a[c].menuitem) {
      p.popup.menuitem.push(item);
    }
    return p;
  }, {
    popup: {
      menuitem: []
    }
  }
);

console.log(b);

Я предполагаю, что объект a может иметь более одного menuitem в массиве.

1 голос
/ 20 апреля 2020

Вы можете использовать уменьшить таким образом

const a = {
  "menu_1": {
    "id": "1",
    "menuitem": [{
      "value": "0",
      "onclick": "0()"
    }, {
      "value": "0",
      "onclick": "0()"
    }]
  },
  "menu_2": {
    "id": "2",
    "menuitem": [{
      "value": "2",
      "onclick": "2()"
    }]
  }
}

const res = Object.values(a).reduce((all, {
  menuitem
}) => {
  all.popup.menuitem = [...all.popup.menuitem, ...menuitem]

  return all
}, {
  popup: {
    menuitem: []
  }
})

console.log(res)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...