在 JavaScript 对象中组合来自不同属性的数组项
Combine array items from different properties in a JavaScript 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 答案,然后删除了该请求?):
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)
试试这个:
var result = [];
var keys = Object.keys(kitchen);
for (var i = 0; i < keys.length; i++) {
kitchen[keys[i]].forEach(function(ingred1) {
for (var j = i+1; j < keys.length; j++) {
kitchen[keys[j]].forEach(function(ingred2) {
result.push(ingred1 + ingred2);
});
}
});
}
console.log(result);
相关文章:
- 如何在不链接/jquery的情况下使用方法应用css属性数组
- 如何使用lodash返回与模式匹配的属性数组
- 从嵌套属性数组中获取对象嵌套值
- 如何使用 javascript 返回数据属性数组
- JQuery 获取返回的属性数组
- 对公共属性数组进行排序
- Angularjs-ng repeat不反映属性数组中的更改
- JADE&NodeJS访问JSON对象属性数组
- Lodash 按数组的属性数组过滤
- 将对象数组转换为属性数组
- 如何从一个共享属性的jQuery集合中获取一个属性数组
- 骨干移除和新视图不会重置其属性数组内容
- 使用JSON从对象数组创建属性数组
- 将数据属性数组转换为对象
- 从属性数组和匹配属性值数组创建JavaScript对象的有效方法
- 访问json中的属性数组
- jquery.获得没有重复的自定义属性数组
- 如何更新对象属性数组值
- 多属性数组语法
- jQuery:生成"name”;动态属性数组