2017-07-15 11 views
1

'$ inputFieldsArray'という入力フィールドの配列を持っていて、それを3つずつ 'newArray'にグループ化すると、各アイテムの新しい配列値が必要になります。私は入力フィールド値が3でグループ化された配列が必要です。最終目標は、9つの入力フィールドex [[i1、i2、i3]、[i4、i5、i6]、[i7、i8、 i9]]。配列の値を別の配列に渡す

'stringArray'の出力が何もないため、最初の2つの配列は正しい結果を出力します。おそらく、私はJS配列に関して何らかの間違いをしています。ごめんなさい、私の主な言語ではありません。私はそれを学びます。ありがとう。ここでenter image description here

は私の機能である:ここで

はクロームコンソールとscreenshootある

$($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ガンジによって提案されたこのアプローチ:あなたは(あなたのブラウザは、おそらく例外を投げた)[]としてのStringArrayが定義されているため

var matrix = [], 
cols = 3; 

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

のスクリーンショットは、コピー+ペーストのために非常に有用である:/ –

+0

@Jonasワット、私が提供すべきかの情報を教えてください。ありがとう。 – Daniel

+0

「bodyHeader」という名前の9つの入力がありますか? – 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); 

Alltogether:

$($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ようこそ;) –

関連する問題