javascript - 将来自 JavaScript 对象中不同属性的数组项组合起来

标签 javascript arrays loops object

我正在尝试创建一个函数,该函数将迭代数组对象,并返回一个数组,该数组将一个数组中的每个元素连接到其他数组中的每个元素:

像这样的对象:

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/

相关文章:

javascript - 如何更改 jQuery Skitter.js 幻灯片的宽度?

javascript - iFrame 不适用于移动版网站

javascript - this != JavaScript 中的 this (好吧,有时......)

javascript - 获取 JavaScript 数组中的方法列表

javascript - 类型错误 : Cannot find function forEach in object in Google App Script

javascript - jQuery提交不停 - 无限循环

javascript - Canvas - 多重合成操作

c# - 从字节数组转换为位数组

c - 字符 : different output when run vs. 的字母顺序已调试?

loops - 如何使用启动它的键停止自动热键中的无限循环