добавление объекта в другой массив динамически - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь добавить объект в 4 различных массива, как цикл.когда «тип» соответствует, первый объект должен перейти в topArray, а второй объект - в bottomArray, а третий объект - в rightArray, как цикл, а также portId также должен меняться с соответствующим массивом, например, если первый объектПри переходе к topArray portId должен быть top0 после одного цикла, пять объектов должны идти в topArray, а portId должен быть top1 и т. д. *

Вот код.

this.comps.forEach((comp) => {
      arrayPorts = [];

        let portlist = comp.ports;
  console.log(portlist);
        portlist.forEach((po) => {
          switch (po.type) {
            case 'rest':
           let  docu1 = {
                "portId": "right0",
                "portColor": "#ff0000",
                "portname": "rest"
              }
              arrayPorts.push(docu1);
              break;
            case 'restcon':
            let  docu2 = {
                "portId": "right0",
                "portColor": "#ff8c8c",
                "portname": "restcon"
              }
              arrayPorts.push(docu2);
              break;
            case 'message':
            let  docu3 = {
                "portId": "right0",
                "portColor": "#006600",
                "portname": "message"
              }
              arrayPorts.push(docu3);
              break;
            case 'messagecon':
            let  docu4 = {
                "portId": "right0",
                "portColor": "#00b300",
                "portname": "messagecon"
              }
              arrayPorts.push(docu4);
              break;
            case 'event':
            let docu5 = {
                "portId": "right0",
                "portColor": "#0019ff",
                "portname": "event"
              }
              arrayPorts.push(docu5);
              break;
            case 'eventcon':
            let  docu6 = {
                "portId": "right0",
                "portColor": "#9ea7ff",
                "portname": "eventcon"
              }
              arrayPorts.push(docu6);
              break;
          }

        })
        this.components.push({
          key: finalindex + 1,
          name: this.reComps[comp._id].name,
          id: comp._id,
          version: "Ver: " + comp.version,
          icon: this.reComps[comp._id].icon,
          loc: "",
          group: this.num,
          topArray: arrayPorts,
          bottomArray: [],
          rightArray: [],
          leftArray: [],

        })
        finalindex++;
      }

    });

comp.ports содержит массив объектов

вот окончательный результат, который мне нужен

{id: "abcd"
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPoA"
key: 10
loc: ""
name: "ABCD"
topArray: [{"portId":"top0", "portColor":"#ff0000", "portname":"rest"},{"portId":"top1", "portColor":"#ff0000", "portname":"message"}]
bottomArray: [{"portId":"bottom0", "portColor":"#ff8c8c", "portname":"event"},
{"portId":"bottom1", "portColor":"#ff0000", "portname":"message"}]
rightArray: [{"portId":"right0", "portColor":"#0019ff", "portname":"message"}]
leftArray: [{"portId":"left0", "portColor":"#ffff33", "portname":"rest"}]
version: "Ver: 10.1.0"}

Мне нужно поместить объект в цикл для этого массива (topArray, bottomArray,rightArray, leftArray) Я нахожу немного запутаться.Пожалуйста, помогите мне с этой проблемой.

1 Ответ

0 голосов
/ 27 сентября 2018

Если я правильно понимаю ваш вопрос, вам нужно подтолкнуть порты к соответствующему массиву.Это один из способов сделать это.

const arrays = {
    left: [],
    right: [],
    top: [],
    bottom: []
};

const ports = [{
    "portId": "top0",
    "portColor": "#ff0000",
    "portname": "rest"
}, {
    "portId": "left0",
    "portColor": "#ff0000",
    "portname": "rest"
}, {
    "portId": "bottom0",
    "portColor": "#ff0000",
    "portname": "rest"
}];

ports.forEach((port) => {

    Object.keys(arrays).forEach((key) => {
        
        // Create a regular expression to match the portId
        
        const regEx = `${key}[0-9]*`;

        const arrayToPush = port.portId.match(new RegExp(regEx));
        
        // If we have found the correct array push the port there
        
        if (arrayToPush) arrays[key].push(port);
    });
});

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