#javascript #html #arrays #json #vue.js
#javascript #HTML #массивы #json #vue.js
Вопрос:
У
меня есть java-скрипт, массив объектов, считываемых из html-таблицы, как показано ниже, представляет номер строки, BranchId представляет номер столбца и значение, связанное с флажком (vue js v-model) 3 * 3 табличные данные:
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}]
]
Мне нужно отправить эти данные в axios API, но данные должны быть в формате ниже
data[0][branches][0]=1
data[0][branches][1]=2
data[0][department]=1
data[1][branches][0]=3
data[1][department]=3
Я пробовал что-то подобное, но у него возникли проблемы (данные, отправленные в неправильных индексах)
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);
каким должен быть цикл для правильной отправки данных?
текущий результат
"data[0][branches][0]": 1,
"data[0][department]": 1,
"data[0][branches][1]": 2,
"data[2][branches][2]": 3,
"data[2][department]": 3
Комментарии:
1.
but it have problems
в чем проблемы?2. данные, отправленные с неправильными индексами @JaromandaX
3. Да, первая проблема: ваши индексы изменяются с 1 на 3 вместо 0 на 2.
4. Действительно ли ваша конструкция с повторной ссылкой на данные «data [
data[${i}][branches][${j}]
]» так, как вы хотите выполнить эту работу? Я даже не хочу этого понимать… это, конечно, плохая читаемость.5. API, построенный таким образом @JanosVinceller
Ответ №1:
Вы забыли пару запятых в своем permissions
объекте. Следующая проблема заключается в том, что вы пытались проверить наличие departmentId
in permissions
, но оно на самом деле depId
есть. Следующее, что вам не нужно определять и отслеживать i
, и j
они удобно предоставляются вам в forEach
функции в качестве второго аргумента, который передается запущенной функции.
Вот рабочая версия того, чего вы пытались достичь:
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. данные в этом случае должны быть «данные [0] [ветви] [0]»: 1, «данные [0] [отдел]»: 1, «данные [0] [ветви] [1]»: 2, «данные [1] [ветви] [0]»: 3, «данные [1] [отдел]»: 3
2. индекс данных должен быть последовательным
3. Я не уверен, что вы подразумеваете под «индексом данных должна быть последовательность», можете ли вы уточнить?
4. вот так (из примера результата) «данные [1] [ветви] [0]»: 3, вместо «данные [2] [ветви] [2]»: 3, @IvanD
5. Я отредактировал решение. Пожалуйста, обратите внимание, что на выходе будет другой порядок элементов, но элементы будут одинаковыми. Это то, чего вы пытались достичь?