split an array into two arrays based on odd/even p

2019-03-25 01:26发布

I have an array Arr1 = [1,1,2,2,3,8,4,6].

How can I split it into two arrays based on the odd/even-ness of element positions?

subArr1 = [1,2,3,4]
subArr2 = [1,2,8,6]

10条回答
时光不老,我们不散
2楼-- · 2019-03-25 02:13

You could try:

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);

JS Fiddle demo.

查看更多
Root(大扎)
3楼-- · 2019-03-25 02:14

Just for fun, in two lines, given that it's been tagged coffeescript :

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 ]
查看更多
萌系小妹纸
4楼-- · 2019-03-25 02:17

A method without modulo operator:

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];
}
查看更多
贼婆χ
5楼-- · 2019-03-25 02:18

filters is a non-static & non-built-in Array method , which accepts literal object of filters functions & returns a literal object of arrays where the input & the output are mapped by object keys.

    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)
      })
    )

查看更多
登录 后发表回答