【发布时间】:2019-10-20 21:30:21
【问题描述】:
我有一个如下所示的对象数组:
[
{
type: 'car',
choices: [
'audi',
'honda',
'bmw',
'ford'
],
},
{
type: 'drink',
choices: [
'soda',
'water',
'tea',
'coffee'
],
},
{
type: 'food',
choices: [
'chips',
'pizza',
'cookie',
'pasta'
],
}
]
如何使用 lodash 将其转换成如下所示:
[
{
question: [
{
drink: "tea"
},
{
car: "bmw"
}
]
},
{
question: [
{
food: "cookie"
},
{
car: "ford"
}
]
},
{
question: [
{
drink: "soda"
},
{
food: "pizza"
}
]
},
{
question: [
{
food: "chips"
},
{
drink: "water"
}
]
},
{
question: [
{
car: "audi"
},
{
food: "pasta"
}
]
},
{
question: [
{
car: "honda"
},
{
drink: "coffee"
}
]
},
]
逻辑如下:
- 每个问题都有 2 个选项的组合,其中每个选项都是不同类型的示例(汽车和食物)。
- 不同类型的组合只能出现两次(汽车、食物)。
- 没有重复的选择。
- 应随机选择选项。
我尝试使用这个函数来展平数组
let flattenItems = _.flatMap(items, ({ type, choices}) =>
_.map(choices, choice => ({
question: [
{ type: type, choice: choice },
{ type: type, choice: choice }
],
})
));
但这不是我需要的,也不是随机的。我不确定我的方法是否正确,我想我应该使用过滤器或减少
任何关于如何解决这个问题的帮助将不胜感激使用 JS 或 lodash 会很好。
【问题讨论】:
-
是的,但是每两个不同元素的组合应该只发生两次。
-
例如(汽车和饮料)的组合在整个结果中应该恰好出现两次,顺序无关紧要。
-
好吧,我想我弄错了。你要求的东西比我最初想象的更复杂。结果中的每个条目都是
{ [obj1[randomObj].type] : obj1[randomObj].choices[randomChoice] },并且您正在选择具有相关随机答案的两种类型的对。抱歉,由于某种原因,我最初误读了它,因为您只想要随机类型对的组合。我现在明白了。 -
这是个好问题。我想问一件事,主要对象将如何选择。您希望它们随机或按顺序排列。我的意思是如果数组中有 4 个元素。然后你想从
1-2然后2-3然后3-4然后4-1然后再1-2等等中选择。在这种情况下,不会有来自2-4的组合。你想要那个还是你想要完全随机的.. -
应该是完全随机的。不是所有的组合都应该存在,只是满足逻辑的组合。
标签: javascript ecmascript-6 lodash