のような配列があり[A,B,C,D]
ます。次のようなforループ内でその配列にアクセスしたい
var arr = [A,B,C,D];
var len = arr.len;
for(var i = 0;i<arr.len;i++){
0 - A,B,C
1 - B,C,D
2 - C,D,A
3 - D,A,B
}
JavaScriptのようにアクセスしたいのですが、何かアイデアはありますか?
のような配列があり[A,B,C,D]
ます。次のようなforループ内でその配列にアクセスしたい
var arr = [A,B,C,D];
var len = arr.len;
for(var i = 0;i<arr.len;i++){
0 - A,B,C
1 - B,C,D
2 - C,D,A
3 - D,A,B
}
JavaScriptのようにアクセスしたいのですが、何かアイデアはありますか?
これを試して:
var arr = ["A","B","C","D"];
for (var i=0, len=arr.length; i<len; i++) {
alert(arr.slice(0, 3).join(","));
arr.push(arr.shift());
}
配列を変更しないと、次のようになります
for (var i=0, len=arr.length; i<len; i++) {
var str = arr[i];
for (var j=1; j<3; j++)
str += ","+arr[(i+j)%len]; // you could push to an array as well
alert(str);
}
// or
for (var i=0, len=arr.length; i<len; i++)
alert(arr.slice(i, i+3).concat(arr.slice(0, Math.max(i+3-len, 0)).join(","));
for (var i = 0; i < arr.length; i++) {
var subarr = [];
for (var j = 0; j < 3; j++) {
subarr.push(arr[(i+j) % arr.length]);
}
console.log(i + " - " + subarr.join(','));
}
私が作ったこのワンライナーはどうですか?
var nextItem = (list.indexOf(currentItem) < list.length - 1)
? list[list.indexOf(currentItem) + 1] : list[0];
「インプレース」循環シフトの 1 行のソリューション:
const arr = ["A","B","C","D"];
arr.forEach((x,i,t) => {console.log(i,t); t.push(t.shift());});
console.log("end of cycle", arr); // control: cycled back to the original
ログ:
0 Array ["A", "B", "C", "D"]
1 Array ["B", "C", "D", "A"]
2 Array ["C", "D", "A", "B"]
3 Array ["D", "A", "B", "C"]
"end of cycle" Array ["A", "B", "C", "D"]
最初の 3 項目のみが必要な場合は、次を使用します。
arr.forEach((x,i,t) => {console.log(i,t.slice(0, 3)); t.push(t.shift());});