如何通过下划线更改收集结构?

时间:2014-04-24 01:30:11

标签: javascript underscore.js

我目前的收藏如下:

[
  {Tom:true,age:23},
  {Jack:true:age:22},
  {Lucy:false,age:22}
]

如何通过下划线将其转换为此内容?

[
  {name:'Tom',isMale:true,age:23},
  {name:'Jack',isMale:true,age:22},
  {name:'Lucy',isMake:true,age:22}
]

2 个答案:

答案 0 :(得分:2)

您可以使用reduce(瑞士军刀迭代器)复制内部对象,同时重新排列nameisMale值。像这样:

_(a).map(function(o) {
    return _(o).reduce(function(memo, v, k) {
        if(k === 'age') {
            # Copy 'age' through as-is
            memo[k] = v
        }
        else {
            # Assume the rest is name:boolean so bust it apart
            memo.name   = k;
            memo.isMale = v;
        }
        return memo;
    }, { });
});

演示:http://jsfiddle.net/ambiguous/FE4Rw/

答案 1 :(得分:1)

来自您对象的

Omitting age,然后将其转换为pairs可以为您提供基础:

_.map(data, function(o) {
    var p = _.pairs(_.omit(o, 'age'))[0]; // [name, boolean]
    return {
        age: o.age,
        name: p[0],
        isMale: p[1]
    };
});

http://jsfiddle.net/nikoshr/9uE5a/