如何将数组拆分为奇数数组和偶数数组

时间:2018-09-04 07:26:32

标签: javascript reactjs

我在将数组拆分为单独的数组Odd和Even时遇到问题。 我所做的是:

componentDidMount() {
 axios.get( `${this.props.cmsUrl}types/genres`)
 .then(response => { if ( response.data !== undefined ) {

  let even = [];
  let odd = [];
  let allData = ["a", "b", "c", "d", "e", "f", "g", "h", ];

  for (var i = 0; i < allData.length; ++i) {
    if ( ( allData[i] % 2 ) === 0) { 
      even.push(allData[i]);
    } 
    else { 
      odd.push(allData[i]); 
    }
  };
  console.log("allData : ",allData);
  console.log("even : ",even);
  console.log("even : ",odd);
 }}
)
}

我真正期望的是

allData = [a, b, c, d]
odd = [a , c]
even = [b, d]

但是真正发生的是

allData = even 
odd = empty array

这是我的问题吗=> ( allData[i] % 2 ) === 1

console.log是:

  allData :  (8) ["a", "b", "c", "d", "e", "f", "g", "h"]0: "a"1: "b"2: "c"3: 
  "d"4: "e"5: "f"6: "g"7: "h"length: 8__proto__: Array(0)
    details.js:56 even :  []length: 0__proto__: Array(0)
    details.js:57 odd :  (8) ["a", "b", "c", "d", "e", "f", "g", "h"]0: 
   "a"1: "b"2: "c"3: "d"4: "e"5: "f"6: "g"7: "h"length: 8__proto__: Array(0)

谢谢

4 个答案:

答案 0 :(得分:2)

您必须使用 charCodeAt 方法,因为 allData 是一个字符串数组,而不是数字数组。

这是您解决问题的方法:

if ( ( allData[i].charCodeAt(0) % 2 ) === 0) { your code }

=================

Thomas Scheffer 所述,您似乎希望基于字符索引而不是其值进行排序。

因此,如果您要基于索引进行排序,则必须编写:

if ( ( i % 2 ) === 0) { your code }

它像这样转换:

allData = ["b","f","z","w"] => { odd=["f","w"], even=["b","z"]  }

但是如果您要基于字符值进行排序,则必须编写:

if ( ( allData[i].charCodeAt(0) % 2 ) === 0) { your code }

它像这样转换:

allData = ["b","f","z","w"] => { odd=["w"] , even=["b","f","z"] }

答案 1 :(得分:0)

正确的条件是if ( ( allData[i] % 2 ) === 0)

在控制台中尝试:

4 % 2
4 % 3

答案 2 :(得分:0)

您可以使用过滤器方法

代替for循环

/*ES6*/

let evenArray = result.filter((a,i) => i%2);
let oddArray = result.filter((a,i) => !(i%2));

/*ES5*/

let evenArray = result.filter(function(a,i){return i%2});
let oddArray = result.filter(function(a,i){return !(i%2)});

答案 3 :(得分:0)

您可以使用Array.prototype.reduce

let allData = [ "a", "b", "c", "d", "e", "f", "g", "h" ];

const { even, odd } = allData.reduce((acc, val, index) => {
    const key = index % 2 ? 'odd' : 'even';
    return {
       ...acc,
       [key]: acc[key].concat(val),
    };
}, { odd: [], even: [] });

console.log( 'even', even );
console.log( 'odd', odd );