2016-02-04 37 views
1

我试图以最优雅的方式将以下对象转换为使用lodash:lodash的mapValues所有密钥

var original = { 
    email: { 
    0: '[email protected]', 
    1: '[email protected]', 
    2: '[email protected]' 
    }, 
    name: { 
    0: 'Sam', 
    1: 'Jack', 
    2: 'Lucy' 
    }, 
    last_name: { 
    0: 'Smith', 
    1: 'Green', 
    2: 'Tompson' 
    } 
}; 

进入这个:

var expected = [ 
    { 
    email: '[email protected]', 
    name: 'Sam', 
    last_name: 'Smith' 
    }, 
    { 
    email: '[email protected]', 
    name: 'Jack', 
    last_name: 'Green' 
    }, 
    { 
    email: '[email protected]', 
    name: 'Lucy', 
    last_name: 'Tompson' 
    } 
]; 

我知道我可以使用_.mapValues(original, index);其中index0,12,但我需要一个包含所有mapValues的数组。

original中的键是可变的(有时候有3个,有时候有2个,有时候是6个),索引的数量也是如此。我找到了一些解决方案,但它们都显得过于复杂。我有一种感觉,用一些lodash的方法来做这件事是一种优雅的方式。任何帮助,将不胜感激。

回答

2

如何:

// _.size(_.values(original)[0]) - amount of rows (3 in that case) 
var expected = _.times(_.size(_.values(original)[0]), function (index) { 
    return _.mapValues(original, index); 
}); 

编辑:一行

var expected = _.times(_.size(_.values(original)[0]), _.mapValues.bind(_, original)); 
+0

我喜欢它!比我所拥有的更短。我正在尝试一种解决方案,围绕一条单一的链接线,但是这种感觉更清晰。 –

+0

看看eddited的答案。 –

+0

美丽。谢谢! –

相关问题