我正在尝试创建一个函数,该函数将迭代数组对象,并返回一个数组,该数组将一个数组中的每个元素连接到其他数组中的每个元素:
像这样的对象:
kitchen = {
food: [".bacon",".bananas"],
drinks: [".soda",".beer"],
apps: ['.fritters','.wings']
}
所需的返回数组:
[
".bacon.soda",".bacon.beer",
".bananas.soda",".bananas.beer",
".bacon.fritters",".bacon.wings",
".bananas.fritters",".bananas.wings",
".soda.fritters",".soda.wings",
".beer.fritters",".beer.wings"
]
我很难思考如何实现这一目标。我的一个想法是创建另一个对象并创建一个散列,其中每个数组项成为一个属性,然后循环遍历,所以我有类似的东西:
newObj = {
".bacon": [".soda",".beer",".fritters",".wings"]
".bananas": [".soda",".beer"...etc]
etc...
}
然后循环遍历每个 prop,将每个数组元素上的属性连接到一个新数组中?不确定这是否太过分了?
普通 JS 很好,但如果您也有一个 CoffeeScript 解决方案,那就太好了。
谢谢
最佳答案
这是一个使用 CoffeeScript 语法的解决方案(因为您要求 CoffeeScript 答案,然后删除了该请求?):
kitchen =
food: [".bacon",".bananas"]
drinks: [".soda",".beer"]
apps: ['.fritters','.wings']
allGroups = Object.keys(kitchen).map (key) -> kitchen[key]
allValues = []
allGroups.forEach (group, i) ->
otherValues = Array.prototype.concat.apply [], allGroups.slice(i + 1)
group.forEach (v1) -> otherValues.forEach (v2) -> allValues.push(v1 + v2)
console.log(allValues)
这是纯 JS 版本:
var kitchen = {
food: [".bacon", ".bananas"],
drinks: [".soda", ".beer"],
apps: ['.fritters', '.wings']
}
var allGroups = Object.keys(kitchen).map(function(key) {
return kitchen[key];
});
var allValues = []
allGroups.forEach(function(group, i) {
var otherValues = Array.prototype.concat.apply([], allGroups.slice(i + 1));
group.forEach(function(v1) {
otherValues.forEach(function(v2) {
allValues.push(v1 + v2);
});
});
});
console.log(allValues)
关于javascript - 将来自 JavaScript 对象中不同属性的数组项组合起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28138095/