Mam tablicę skryptów Java o obiektach odczytywanych z tabeli HTML poniżej Deprent reprezentuje numer wiersza, rozgałęziony reprezentuje numer kolumny i val połączony z polem wyboru (VUE JS V-Model) 3 * 3 Dane tabeli:

 permissions=   [
    [{depId:1,branchId:1,val:true},{depId:1,branchId:2,val:true},{depId:1,branchId:3}],
    [{depId:2,branchId:1},{depId:2,branchId:2},{depId:2,branchId:3}],
    [{depId:3,branchId:1},{depId:3,branchId:2},{depId:3,branchId:3,val:true}]
    ]

Muszę wysłać te dane do ACSIOS API, ale dane powinny znajdować się poniżej formatu

data[0][branches][0]=1
data[0][branches][1]=2
data[0][department]=1  

data[1][branches][0]=3
data[1][department]=3

Próbowałem czegoś takiego, ale ma problemy (dane wysyłane w niewłaściwych indeksów)

let data={};
   permissions.forEach((row, i) => {
      row.forEach((col, j) => {
        if (col["val"] === true) {
          data[`data[${i}][branches][${j}]`] = col.branchId;
          data[`data[${i}][department]`] = col.deptId;
        }
      });
    });
        console.log(data);

Jak pętla powinna wysłać dane w prawidłowy sposób?

Obecny wynik jest

"data[0][branches][0]": 1,
  "data[0][department]": 1,
  "data[0][branches][1]": 2,
  "data[2][branches][2]": 3,
  "data[2][department]": 3
0
Alaa 19 październik 2020, 08:40

1 odpowiedź

Najlepsza odpowiedź

Zapomniałeś kilku przecinków w obiekcie {x0}}. Kolejnym problemem jest to, że próbowałeś sprawdzić departmentId w permissions, ale jest tam depId. Następną rzeczą jest to, że nie musisz definiować i śledzić i i j, są one dogodnie dostarczone w funkcji forEach jako drugi argument, który jest przekazywany do funkcji biegania .

Oto pracująca wersja tego, co próbowałeś osiągnąć:

permissions = [
  [{
    depId: 1,
    branchId: 1,
    val: true
  }, {
    depId: 1,
    branchId: 2,
    val: true
  }, {
    depId: 1,
    branchId: 3
  }],
  [{
    depId: 2,
    branchId: 1
  }, {
    depId: 2,
    branchId: 2
  }, {
    depId: 2,
    branchId: 3
  }],
  [{
    depId: 3,
    branchId: 1
  }, {
    depId: 3,
    branchId: 2
  }, {
    depId: 3,
    branchId: 3,
    val: true
  }]
]

let data = {};
let j = 0;

permissions.forEach((row) => {
  let i = 0;
  let departmentSeen = false;

  row.forEach((col) => {
    if (col["val"] === true) {
      data[`data[${j}][branches][${i}]`] = col.branchId;
      data[`data[${j}][department]`] = col.depId;
      i++;
      departmentSeen = true;
    }
  });

  if (departmentSeen) {
    j++;
  }
});

console.log(data);
1
IvanD 19 październik 2020, 06:42