我用很多对象组成了这样的数组:
[
{
startAt: "2016-01-01 11:35:00",
fromCurrencyId: "a49cd579-18ea-44cb-8117-86428b64a27a",
toCurrencyId: "c5a0c46c-c5b5-49a5-9a16-4a829269583e"
},
{
startAt: "2016-01-01 11:40:00",
fromCurrencyId: "a49cd579-18ea-44cb-8117-86428b64a27a",
toCurrencyId: "c5a0c46c-c5b5-49a5-9a16-4a829269583e"
},
{
startAt: "2016-01-01 12:00:00",
fromCurrencyId: "c5a0c46c-c5b5-49a5-9a16-4a829269583e",
toCurrencyId: "5491dfe0-7d61-407d-b642-7fd3ec905302"
},
{
startAt: "2016-01-01 12:40:00",
fromCurrencyId: "c5a0c46c-c5b5-49a5-9a16-4a829269583e",
toCurrencyId: "5491dfe0-7d61-407d-b642-7fd3ec905302"
},
{
startAt: "2016-01-01 11:40:00",
fromCurrencyId: "a49cd579-18ea-44cb-8117-86428b64a27a",
toCurrencyId: "5491dfe0-7d61-407d-b642-7fd3ec905302"
},
...
]
我想按字段将此数组拆分为子数组:'起始货币ID','终止货币ID':
[
[
{
startAt: "2016-01-01 11:35:00",
fromCurrencyId: "a49cd579-18ea-44cb-8117-86428b64a27a",
toCurrencyId: "c5a0c46c-c5b5-49a5-9a16-4a829269583e"
},
{
startAt: "2016-01-01 11:40:00",
fromCurrencyId: "a49cd579-18ea-44cb-8117-86428b64a27a",
toCurrencyId: "c5a0c46c-c5b5-49a5-9a16-4a829269583e"
}
],
[
{
startAt: "2016-01-01 12:00:00",
fromCurrencyId: "c5a0c46c-c5b5-49a5-9a16-4a829269583e",
toCurrencyId: "5491dfe0-7d61-407d-b642-7fd3ec905302"
},
{
startAt: "2016-01-01 12:40:00",
fromCurrencyId: "c5a0c46c-c5b5-49a5-9a16-4a829269583e",
toCurrencyId: "5491dfe0-7d61-407d-b642-7fd3ec905302"
}
],
[
{
startAt: "2016-01-01 11:40:00",
fromCurrencyId: "a49cd579-18ea-44cb-8117-86428b64a27a",
toCurrencyId: "5491dfe0-7d61-407d-b642-7fd3ec905302"
}
]
]
我试过使用lodash group by和native方法,但是我还不知道如何正确地使用。希望你能帮助我。
我最后一次尝试:
const props = ['fromCurrencyId', 'toCurrencyId']
const a = _.groupBy(data, function(note){
return _.find(_.pick(note, props));
});
其中data是我的数组。接下来,我想从对象中删除键,从而得到我的新数组
3条答案
按热度按时间scyqe7ek1#
groupBy方法应该返回一个一致的“key”,以便将相似的对象分组,但当前的方法不能做到这一点,因为
_.find()
没有用于任何数据(只传递了一个参数)。下面我使用reduce创建了一个
Map
(类似于一个对象),map中的每个键都是一个唯一的键,它将fromCurrencyId
与toCurrencyId
属性组合在一起,并将值存储为具有相同货币id组合的对象数组。请参见以下工作示例(以及代码注解以了解更多详细信息):
使用lodash的一种方法是先使用
_.groupBy()
,然后使用_.at()
获取fromCurrencyId
和toCurrencyId
处的值(_.at()
就像您_.pick()
,但它返回的是一个值数组而不是一个对象)。(通过一个隐式的.toString()
调用)当它被用作_.groupBy()
返回的对象的键时,你可以用_.values()
来获取分组值:第一次
cuxqih212#
我用
some
检查结果中是否已经存在子数组,如果没有,我用filter
找到匹配的fromCurrencyId
和toCurrencyId
,然后创建一个子数组并将其推到结果中。ru9i0ody3#
lodash
也许可以用更少的步骤来完成,但我想在不使用外部库的情况下演示答案(目前)请参阅内嵌注解以了解原因: