私は配列を持っていますArr1 = [1,1,2,2,3,8,4,6]
。
要素の位置の奇数/偶数に基づいて2つの配列に分割するにはどうすればよいですか?
subArr1 = [1,2,3,4]
subArr2 = [1,2,8,6]
あなたは試すことができます:
var Arr1 = [1,1,2,2,3,8,4,6],
Arr2 = [],
Arr3 = [];
for (var i=0;i<Arr1.length;i++){
if ((i+2)%2==0) {
Arr3.Push(Arr1[i]);
}
else {
Arr2.Push(Arr1[i]);
}
}
console.log(Arr2);
odd = arr.filter (v) -> v % 2
even = arr.filter (v) -> !(v % 2)
または、より慣用的なCoffeeScriptの場合:
odd = (v for v in arr by 2)
even = (v for v in arr[1..] by 2)
ネストされた配列を使用する方が簡単です。
result = [ [], [] ]
for (var i = 0; i < yourArray.length; i++)
result[i & 1].Push(yourArray[i])
最新のブラウザをターゲットにしている場合は、ループをforEach
に置き換えることができます。
yourArray.forEach(function(val, i) {
result[i & 1].Push(val)
})
アンダースコア を使用した機能的アプローチ:
xs = [1, 1, 2, 2, 3, 8, 4, 6]
partition = _(xs).groupBy((x, idx) -> idx % 2 == 0)
[xs1, xs2] = [partition[true], partition[false]]
[編集]今あります _。partition :
[xs1, xs2] = _(xs).partition((x, idx) -> idx % 2 == 0)
var Arr1 = [1, 1, 2, 2, 3, 8, 4, 6]
var evenArr=[];
var oddArr = []
var i;
for (i = 0; i <= Arr1.length; i = i + 2) {
if (Arr1[i] !== undefined) {
evenArr.Push(Arr1[i]);
oddArr.Push(Arr1[i + 1]);
}
}
console.log(evenArr, oddArr)
アンダースコア連鎖関数を使用したtoklandのソリューションのワンライナーの改善として:
xs = [1, 1, 2, 2, 3, 8, 4, 6]
_(xs).chain().groupBy((x, i) -> i % 2 == 0).values().value()
楽しみのために、コーヒースクリプトのタグが付けられていることを考えると、2行で:
Arr1 = [1,1,2,2,3,8,4,6]
[even, odd] = [a, b] = [[], []]
([b,a]=[a,b])[0].Push v for v in Arr1
console.log even, odd
# [ 1, 2, 3, 4 ] [ 1, 2, 8, 6 ]
filters
は、非静的で組み込みのArrayメソッドであり、フィルター関数のliteral object
を受け入れ、入力と出力がオブジェクトによってマップされる配列のliteral object
を返します。キー。
Array.prototype.filters = function (filters) {
let results = {};
Object.keys(filters).forEach((key)=>{
results[key] = this.filter(filters[key])
});
return results;
}
//---- then :
console.log(
[12,2,11,7,92,14,5,5,3,0].filters({
odd: (e) => (e%2),
even: (e) => !(e%2)
})
)
2ずつインクリメントする2つのforループを作成でき、最初のループでは0で始まり、2番目のループでは1で始まると思います。
モジュロ演算子を使用しないメソッド:
var subArr1 = [];
var subArr2 = [];
var subArrayIndex = 0;
var i;
for (i = 1; i < Arr1.length; i = i+2){
//for even index
subArr1[subArrayIndex] = Arr1[i];
//for odd index
subArr2[subArrayIndex] = Arr1[i-1];
subArrayIndex++;
}
//For the last remaining number if there was an odd length:
if((i-1) < Arr1.length){
subArr2[subArrayIndex] = Arr1[i-1];
}