2017-07-15 144 views
1

我有一個名爲'$ inputFieldsArray'的輸入字段數組,然後我將它們切成3組分成'newArray',然後我需要爲每個項目分配另一個數組原因的新數組值結束語我需要一個數組,其輸入字段值由3組成。最終目標是獲得一個包含9個輸入字段ex [[i1,i2,i3],[i4,i5,i6],[i7,i8, I9]。將數組值傳遞給另一個數組

由於某種原因,'stringArray'輸出沒有任何作用,前兩個數組輸出正確的結果。這可能是一些關於JS數組的錯誤..抱歉的js不是我的主要語言,我嘗試去學習它。謝謝。

這裏是鉻控制檯screenshoot: enter image description here

這裏是我的功能:

$($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甘吉建議:

var matrix = [], 
cols = 3; 

//init the grid matrix 
for (var i = 0; i < cols; i++) { 
    matrix[i] = []; 
} 
+0

截圖是複製粘貼+非常有用:/ –

+0

@Jonas W,告訴我,我應該提供什麼樣的信息。謝謝。 – Daniel

+0

因此,你有九個輸入名稱'bodyHeader'? – adeneo

回答

0

stringArray[k]是不確定的,因爲你定義字符串數組爲[](您的瀏覽器可能拋出一個異常)。另外newArray[k]從索引0開始。

您可以改爲編寫stringArray[k] = [newArray[k][0].value, newArray[k][1].value, newArray[k][2].value]

+0

謝謝!簡單而有效! – Daniel

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),[]); 

}); 
+0

你的回答也很好,語言很好用!謝謝! – Daniel

+0

@Daniel youre welcome;) –

相關問題