【问题标题】:stopping a map or filter from iterating the last index阻止地图或过滤器迭代最后一个索引
【发布时间】:2020-08-28 22:50:51
【问题描述】:
var arr = [1,2,3,4]
arr.map((x,i) => arr[i+1] - x)  
// 1,1,1,NaN

有没有办法可以使用Array.mapArray.filter 方法中的索引来比较值而不比较最终索引以避免NaN 的结果?

【问题讨论】:

  • 你期望输出是什么?
  • Map 总是产生一个相同大小的数组。您只能定义必须以不同方式计算的值

标签: javascript arrays sorting iteration


【解决方案1】:

您可以使用Array#slice 删除最后一个元素,然后再应用map

var arr = [1,2,3,4]
console.log(arr.slice(0,-1).map((x,i) => arr[i+1] - x));

【讨论】:

    【解决方案2】:

    你能做到这一点的最短方法是

    var mapped = arr.map((x,i) => arr[i+1] - x).filter(x => x);
    

    也就是说过滤所有 x 为真的值


    但我认为你不能只用地图来做到这一点。我认为 map 总是返回一个等长的数组。

    您使用reduce 来实现这一点。

    var arr = [1,2,3,4]
    
    var reduced = arr.reduce((ids,x,i) => {
        if (i < arr.length-1 ){
            ids.push(arr[i+1] - x)
        }
        return ids
    }, []);
    
    console.log(reduced)
    

    输出

    [ 1, 1, 1 ]
    

    【讨论】:

      【解决方案3】:

      是的,你可以。只需使用Arra.filter() 并仅返回具有原始值的值:

      var arr = [1,2,3,4];
      var newArr = arr.map((x,i) => arr[++i] - x)
                .filter(val => val);
      
      console.log(newArr);

      【讨论】:

        猜你喜欢
        • 2020-10-09
        • 1970-01-01
        • 1970-01-01
        • 2016-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多