【问题标题】:how to convert object into array of objects (or collection of objects)如何将对象转换为对象数组(或对象集合)
【发布时间】:2015-12-02 01:35:54
【问题描述】:

搜索再搜索,找不到这个,但我假设它很容易。

我正在寻找与 lodash _.pairs() 等效的 lodash“对象” - 但我想要一个对象数组(或对象集合)。

例子:

// Sample Input
{"United States":50, "China":20}

// Desired Output
[{"United States":50}, {"China":20}]

【问题讨论】:

    标签: javascript arrays javascript-objects lodash


    【解决方案1】:

    这样的事情就足够了吗?不是lodash,而是……

    var input = {"United States":50, "China":20};
    Object.keys(input).map(function(key) {
      var ret = {};
      ret[key] = input[key];
      return ret;
    });
    //=> [{"United States":50}, {"China":20}]
    

    【讨论】:

    • 不错的解决方案。我将等待,看看是否有 lodash 选项出现 - 如果可能,这个项目相当致力于使用 lodash。
    • lodash 是帮助库,如果您的语言本身支持您正在尝试做的事情,则不需要使用它:P
    • @cale_b 所有的 javascript 都是 lodash,但当然是微不足道的。
    • @mkoryak - 明白了。但是,如果我已经加载了 lodash,并且我可以在单个函数行(例如 _.pairs())中完成它,并在我的 _.chain() 中使用它,那么使用 lodash 方法比使用让我编写这个函数并单独调用它。你是说它在 lodash 中不可用吗?
    • @cale_b Vohuman 提供了您正在寻找的解决方案!
    【解决方案2】:

    使用 lodash,这是生成预期结果的一种方式:

    var res = _.map(obj, _.rearg(_.pick, [2,1]));
    

    上面的短代码 sn-p 可能会造成混淆。如果不使用_.rearg 函数,它会变成:

    _.map(obj, function(v, k, a) { return _.pick(a, k); });
    

    基本上rearg 函数用于对传递给pick 方法的参数重新排序。

    【讨论】:

    • 啊,这正是 OP 想要的。谢谢!
    • 这是这个问题的正确答案,但如果你在我的代码库中使用它而没有 10 行注释,我会踢你。我可以看看@HunanRostomyan 的代码,不假思索地告诉你它的确切作用
    • @mkoryak - 确实,许多 lodash 函数链都需要 cmets,否则这几乎是荒谬的! (我发现 Angular 也是如此)。
    • @cale_b,要使用chain 中的代码,您需要将其添加为mixin
    • @andy - 我能够在没有mixin - _.chain(data).map(function(v,k,a) {return _.pick(a,k);}); 的情况下使其在链中工作
    【解决方案3】:

    好的,如果你必须:

    var input = {"United States":50, "China":20};
    var ouput = _.map(input, function(val, key){ var o = {}; o[key] = val; return o; });
    

    但这并不比之前的答案好。更糟。

    【讨论】:

    • 你是对的,这不是更好。虽然我知道我可以使用_.map 来做任何事情,但我要问的是是否有一个与_.pairs() 等效的版本我缺少....
    • 感谢您对此的帮助!
    • @mkoryak: 关心检查 qtip 问题吗? stackoverflow.com/questions/34125268/…
    猜你喜欢
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 2020-06-15
    • 2016-03-11
    • 1970-01-01
    • 2018-02-13
    相关资源
    最近更新 更多