如何将对象转换为对象数组(或对象集合)

4

我搜索了很久,但找不到答案,但我认为这很容易。

我正在寻找lodash“object”的等价物,类似于lodash的_.pairs() - 但我想要一个对象数组(或一组对象)。

例如:

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

// Desired Output
[{"United States":50}, {"China":20}]
3个回答

6
这个如何,这不是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。 - random_user_name
lodash是一个辅助库,如果你的编程语言本身支持你想要做的事情,就不需要使用它。:P - mkoryak
@cale_b 所有的 JavaScript 都是 lodash,但当然只是微不足道的。 - Hunan Rostomyan
@mkoryak - 我明白了。但是,如果我已经加载了lodash,并且可以在单个函数行中完成此操作,例如_.pairs(),并在我的_.chain()中使用它,那么使用lodash方法比让我编写此函数并单独调用它更有意义。您是否建议lodash中没有此功能? - random_user_name
@cale_b Vohuman提供了你正在寻找的完美解决方案! - Hunan Rostomyan

5
使用lodash,以下是生成期望结果的一种方法:
var res = _.map(obj, _.rearg(_.pick, [2,1]));

上面的短代码片段可能会让人感到困惑。如果不使用_.rearg函数,它将变成:

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

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

啊,这正是原帖所想要的。谢谢! - Hunan Rostomyan
3
这是这个问题的正确答案,但如果你在我的代码库中使用它而没有10行注释,我会踢掉你。我可以查看@HunanRostomyan的代码并很快告诉你它的作用。 - mkoryak
@mkoryak - 的确,许多lodash函数链需要注释,否则几乎是没有意义的!(我发现这也适用于Angular)。 - random_user_name
@cale_b,要在“chain”中使用该代码,您需要将其添加为mixin - Andy
@andy - 我能够在没有mixin的情况下使其链式工作 - _.chain(data).map(function(v,k,a) {return _.pick(a,k);}); - random_user_name

1

ok, if you must:

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

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

你说得对,这并不更好。虽然我知道我可以使用_.map来做任何事情,但我想问的是是否有一个相当于_.pairs()的版本我错过了... - random_user_name
谢谢你在这件事上的帮助! - random_user_name
@mkoryak:可以看一下 qtip 问题吗?http://stackoverflow.com/questions/34125268/how-to-enable-qtip2-in-piechart-made-by-plottable-js-d3-js - neversaint

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接