【问题标题】:Map an array of arrays映射数组数组
【发布时间】:2016-05-21 10:17:00
【问题描述】:

lodash 中是否有一种方法可以映射数组数组

我想做这样的事情,以保持数组的结构。

def double(x) { return x*2 }

_([[1,2],[3,4]]).somemethod(double) == [[2,4],[6,8]]

【问题讨论】:

    标签: javascript underscore.js lodash


    【解决方案1】:

    在 map 语句中使用 es6 destructuring syntax 会更优雅:

    array.map(([ a, b ]) => [ a*2, b*2 ]);
    

    【讨论】:

      【解决方案2】:

      在 ES5 中做到这一点的简单方法:

      [].concat(...this.array1.map(ap => ap.subArray))

      【讨论】:

        【解决方案3】:
        const deepMap=(input,callback)=>input.map(entry=>entry.map?deepMap(entry,callback):callback(entry))
        
        //test 
        
        deepMap([1,2,3,[1,2]],x=>x*2) // [1,4,9,[1,4]]
        

        【讨论】:

          【解决方案4】:

          可以是一种纠缠:

          var Coef = Array.apply(null, Array(3)).map(function(){return
          Array.apply(null, Array(4)).map(function(){return 0})})
          

          不过,如果你想在 Gas

          中初始化一个数组,它会很有用

          【讨论】:

            【解决方案5】:

            只需_.map 两次:

            var array = [[1, 2], [3, 4]];
            var doubledArray = _.map(array, function (nested) {
                return _.map(nested, function (element) {
                    return element * 2;
                });
            });
            

            或者没有lodash

            var doubledArray = array.map(function (nested) {
                return nested.map(function (element) {
                    return element * 2;
                });
            });
            

            此外,考虑使用es6 arrow functions

            var doubledArray = array.map(nested => nested.map(element => element * 2));
            

            【讨论】:

              【解决方案6】:

              您可以使用 ES2015 箭头函数使您的代码更简洁:

              var array = [[1, 2], [3, 4]];
              var double = x => x * 2;
              var doubledArray = _.map( array, subarray => _.map( subarray, double ));
              

              使用原生 JS:

              var array = [[1, 2], [3, 4]];
              var double = x => x * 2;
              var doubledArray = array.map( subarray => subarray.map( double ));
              

              【讨论】:

              • 假设目标环境支持它们和/或它们使用 Babel 之类的东西进行转换。
              • 箭头函数与他的问题无关。
              猜你喜欢
              • 1970-01-01
              • 2020-01-31
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-12-26
              • 2020-06-08
              • 2011-07-03
              • 1970-01-01
              相关资源
              最近更新 更多