配列の後ろから項目を取得しようとしています。関数は、ループ内の値を出力する必要があります。下の画像では、パターンに2つのアイテムが欠けていることがわかります。
期待される結果
//24,25,26,27,28,29,30
//17,18,19,20,21,22,23
//10,11,12,13,14,15,16
//3,4,5,6,7,8,9
//1,2,26,27,28,29,30
5および9配列の長さは7ではありません。5番目の配列には値が必要です。
[1,2,26,27,28,29,30]
または
[26,27,28,29,30,2,1]
。
同じパターンを9つの数値配列に適用する必要があります。
試してみましたが、解決策が見つかりませんでした。フィドル
// Setup
var arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30];
var arrIndex = 30;
var values
function getValues(length) {
arrIndex = arrIndex - length;
if(arrIndex<0){
arrIndex = arr.length - Math.abs(arrIndex)
values = arr.slice(arrIndex, arrIndex+length)
}
else{
values = arr.slice(arrIndex, arrIndex+length)
}
var valuesCount = values.length;
return values;
}
// Get the values
for (var i = 0; i < 10; i++) {
console.log( getValues(7) );
}
配列の先頭から項目を取得している場合、正常に動作するコードを次に示します。フィドル
回答 2 件
非常に興味深い要件がありますが、チャレンジは受け入れられました:)
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30]; function getValues(length) { const values = []; let temp = []; for (let i = arr.length - 1; i >= 0; i -= 1) { temp.unshift(arr[i]); if (temp.length === length) { values.push(temp); temp = []; } } if (temp.length > 0) { for (let i = arr.length - length + temp.length; i < arr.length; i += 1) { temp.push(arr[i]); } values.push(temp); } return values; } const values = getValues(7); for (let i = 0; i < values.length; i += 1) { console.log(values[i]); }
ここで何が起こっているのか、配列を逆方向にループし、
unshift
を使用しています 配列の先頭に値を配置して一時的な配列を作成します。length
を収集するとき 配列の量、その配列を別の配列にプッシュし、指定されたlength
で配列の配列を作成しますgetValues
に渡される値 関数。ループの最後で、一時配列に何かが含まれている場合、それは
length
の配列の作成を完了できなかったことを意味します ループの最後の残りのアイテムのサイズ。したがって、残りの量の配列の最後に移動し、一時配列を終了して、長さlength
の最終配列を作成します それを最終的なvalues
にプッシュします 配列の配列。
関連記事
- json配列からデータを取得するPHPの範囲[0] =>配列、[1] =>配列
- jsonflutterから配列を取得する
- PythonでURLからデータを取得する方法
- AndroidStudioのユーザーから日付を取得するにはどうすればよいですか?
- Java Script配列内のアイテムをカウントするにはどうすればよいですか?ただし、アイテムが隣り合って同じである場合に限りますか?
- SwiftUIでネストされた配列からアイテムを表示する
- 配列の長さを取得できません
- ファイルは削除から戻ってきます
- flutter get json array
- JSでフィボナッチ数列を作成するときに、配列の最初の2つの項目を取得できません
@carlos、以下の解決策を試してください、
問題は、ここでは(Array.slice)関数です。
30の配列があります[配列のインデックスは0〜29のみ有効です]。 つまり、var arr = [1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、19、20、21、22、23 、24、25、26、27、28、29、30];
var arrIndex = 30を使用すると、その時点で;ループごとに、Array(5)の値はインデックス25から始まり、配列の長さは7です。
したがって、ここでは、代わりに31である25 + 7から値をフェッチしようとします(FYI、31はインデックスです)。
したがって、値= arr.slice(25,31)。知っているように、30と31のインデックスはありませんvar arr 配列5の値にも間違いなく存在します。
そのため、ここでは解決策として、スライス配列のendIndexが存在しない場合、残りの要素を取得するためにOインデックスから再度起動する必要があります。だからあなたはいくつのインデックスが欠落しているかを調べる必要がありますか? [ここではカウント= 2]ですので、そのカウントを防止し、配列のスライスを(0、cnt)から取得する必要があります。最後に、元の配列を次の配列と連結する必要があります(つまり、0から開始します)
これを解決するために、ロジックが書かれています
したがって、最終出力は以下のようになります。