Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 键的lodash映射_Javascript_Lodash - Fatal编程技术网

Javascript 键的lodash映射

Javascript 键的lodash映射,javascript,lodash,Javascript,Lodash,我只是想了解lodash,所以这个问题的答案可能很简单 假设我有以下数组: vararr=[{a:2,b:3,c:4},{a:1,b:4,c:2}]; 我想重命名一些键(用于所有对象)并删除另一个键,以提供以下新数组: var newArr=[{x:2,y:4},{x:1,y:2}]; 这就是将a,c重命名为x,y,并删除b 用lodash做这件事最整洁的方法是什么?我认为应该采用这种方法,但这需要一个对象作为输入,而不是一个集合 这与发布在上的问题类似。只需使用: 或者,正如Vohuman

我只是想了解lodash,所以这个问题的答案可能很简单

假设我有以下数组:

vararr=[{a:2,b:3,c:4},{a:1,b:4,c:2}];
我想重命名一些键(用于所有对象)并删除另一个键,以提供以下新数组:

var newArr=[{x:2,y:4},{x:1,y:2}];
这就是将a,c重命名为x,y,并删除b

用lodash做这件事最整洁的方法是什么?我认为应该采用这种方法,但这需要一个对象作为输入,而不是一个集合

这与发布在上的问题类似。

只需使用:

或者,正如Vohuman所指出的,您可以简单地使用本机函数(如果不需要考虑的话):

使用ES6,您可以非常简洁地使用、参数和隐式返回:

arr.map(({a, c}) => ({ x: a, y: c }));

我不确定
\uux.mapKeys()
是否会从对象中删除不需要的键。 下面我为您的任务准备了更灵活的解决方案。它可以转换为Lodash函数

编辑: Lodash解决方案(应更具可读性):


这是一种使用和:

该调用生成一个回调函数,该函数将仅使用给定的属性名创建新对象-
'a'
'b'
部分应用于
pick()


该函数确保只向回调传递一个参数。我们之所以需要它,是因为
map()
将提供多个参数,我们的回调函数将只将项本身作为参数使用。

执行
.map()
,并在该回调中执行
.mapkeys()
。应该注意,本机
数组.prototype.map
执行相同的操作。一个人不需要lodash。这看起来是一个很好的解决方案,但问题是明确地要求使用lodash。
arr.map(function(obj) { return { x: obj.a, y: obj.c } });
arr.map(({a, c}) => ({ x: a, y: c }));
var arr = [{ a: 2, b: 3, c: 4 }, { a: 1, b: 4, c: 2 }];

// mapping keys (if not presented - will be removed)
var keysMap = {
    a: 'x',
    c: 'y'
};

var newArr = arr.map(function(a){
    var o = {};
    Object.keys(a).forEach(function(k){
        if(Object.keys(keysMap).indexOf(k) >= 0){
            o[keysMap[k]] = a[k];
        }
    });
    return o;
});

// newArr: [{x: 2, y: 4}, {x: 1, y: 2}]
var arr = [{ a: 2, b: 3, c: 4 }, { a: 1, b: 4, c: 2 }];

_.mixin({
    mapObject: function(o, keysMap){
        var n = {};
        _.each(keysMap, function(v, k){
            if(!!o[k]){
                n[v] = o[k];
            }
        });
        return n;
    }
});

var keysMap = {
    a: 'x',
    c: 'y'
};

var newArr = _.map(arr, function(a){
    return _.mapObject(a, keysMap);
});
_.map(arr, _.ary(_.partialRight(_.pick, 'a', 'b'), 1));