5 个回答

你的问题

如何获取数组下标为偶数的下标所对应的数组内的值

换句话说就是: 获取数组内偶数下标对应的 数组

照上面的句子来看,合理猜测你说的其实是 从二维数组里取得偶下标对应的数组们,并把他们铺平为一个数组

比如

var test = [
    ['a'],
    ['b'],
    ['c'],
    ['d']
]

处理之后结果是 ['a', 'c']偶数下标对应的数组们合并为一个数组 (下标从 0 开始 0 是偶数


如果确信是这样 请继续往下看

先获取偶下标对应的数组们

var isEven = i => i % 2 === 0; 

var evens = arr => arr.filter(
    // 子数组, 序号 => idx 是偶数则返回 true 否则 false 
    // 这样可以过滤掉奇数下标的元素 
    (subArr, idx) => isEven(idx)
); 

把用 evens 获得的数组们铺平

比如 [[1], [2]] 处理之后变成 [1, 2]

这个过程就是铺平

var flat = arr => arr.reduce((acc, cur) => {
    // 每一次的返回值将会作为下一次的 acc 来用
    // 那么每一次都把 acc cur 合并在一起 最后就是铺平了 
    return acc.concat(cur)
}, [])

组装

// 把 evens 执行结果传给 flat 执行 作为 getAllEvens 的返回值 
// 可以想象数学上的 y = g(f(x)); 
var getAllEvens = arr => {
    let temp = evens(arr); 
    return flat(temp); 
}

测试

定义待测试数组

// 二维数组 
var testArr = [
    ['这里', '是', '0', '号', '数组', '当然是偶数'], 
    ['所以', '这', '里', '是', '1号', '也就是奇数'],
    [0,1,2,3,4],
    [-1, -2, -3, -4]
]; 

期望值是 这里是0号数组当然是偶数0,1,2,3,4


以下是测试代码:

var res = getAllEvens(testArr); 

console.log('数组:', res); 
console.log('合并:', res.join(','));

ScreenShot

结果如图

clipboard.png

预期所得,确信可行。

Links

一些知识点

MDN - 数组的 filter
MDN - 数组的 reduce
MDN - 箭头函数

var array = [1,2,3,4];
for (var i=0;i<array.length;i++){
    if (i%2==0) {
        console.log(array[i]);
    }
}
var array = [1,2,3,4];
var result = array.filter(function(index, value){
    if (index%2==0) {
        return true;
    }
});
console(array);
console(result);

帮你简单实现了个函数

let arr = [0,1,2,3,4,5,6,7,8,9];
function even(arr){
    return arr.filter((val,index)=>{
        if(index%2 === 0){
            return true;
        }
    })
};
even(arr);
//输出[0, 2, 4, 6, 8]
新手上路,请多包涵

直接使用数组的filter方法

arr.filter(function(a){

  if(a%2===0){

          return   true

}

//a是形参,代表arr数组的每一项,判断的filter方法不会影响原数组意思是把数字i个元素进行%2是否全等于0,凡是被2整出的数都是偶数,既然能被整除,那么余就等于0了,那么得出的是偶数,然后return true,相当于只要偶数,

})

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题