我有一个名为'$ inputFieldsArray'的输入字段数组,然后我将它们分组为3分组为'newArray'然后我需要为每个项目分配新数组值以分配给另一个数组原因我到底需要一个数组输入字段值按3分组。最终目标是获得一个包含9个输入字段ex [[i1,i2,i3],[i4,i5,i6],[i7,i8,i9]]的数组。
出于某种原因'stringArray'输出什么都没有,前两个数组打印正确的结果。关于JS数组我可能会犯一些错误。抱歉js不是我的主要语言,我试着去学习它。感谢。
这是我的功能:
$($submitButton).click(function () {
// Get number of input fields
let $total = $("input[name^='bodyHeader']").length;
// Get input fields as objects
let $inputFieldsArray = $("input[name^='bodyHeader']");
let newArray = [];
let stringArray = [];
let j = 0;
// Group input fields by 3
for (let i = 0; i < $total - 1; i += 3) {
newArray[j] = $inputFieldsArray.slice(i, i + 3);
j++;
}
// Extract string values from newArray and pass them into stringArray
for (let k = 0; k < newArray.length - 1; k++) {
stringArray[k][0] = newArray[k][0].value;
stringArray[k][1] = newArray[k][1].value;
stringArray[k][2] = newArray[k][2].value;
}
// Print to test results
console.log($inputFieldsArray);
console.log(newArray);
console.log("String Array: " + stringArray);
... // Function logic is not complete
});
SOLUTION:
无法在js中声明动态长度二维数组。使用@Stephan建议的这种方法:
stringArray[k] = [newArray[k][0].value, newArray[k][1].value,
newArray[k[2].value];
或@Lorenzo Gangi提出的这种方法:
var matrix = [],
cols = 3;
//init the grid matrix
for ( var i = 0; i < cols; i++ ) {
matrix[i] = [];
}
答案 0 :(得分:0)
stringArray[k]
未定义,因为您将stringArray定义为[]
(您的浏览器可能会抛出异常)。此外,newArray[k]
从索引0开始。
您可以改为编写stringArray[k] = [newArray[k][0].value, newArray[k][1].value, newArray[k][2].value]
。
答案 1 :(得分:0)
基本上,
stringArray[k]
尚未定义,因此设置其[0]属性不起作用。可以这样做:
stringArray[k] =newArray[k].map(el=>el.value);
总数:
$($submitButton).click(function () {
let stringArray = $("input[name^='bodyHeader']").toArray().reduce((res,_,i,arr)=>((i%3==0 && res.push(arr.slice(i,i+3).map(e=>e.value))),res),[]);
});