我正在使用Lodash来使操作对象更容易。我有一个有三个嵌套对象的对象。我想迭代这些,将它们各自的子代以所有可能的组合连接在一起,而每个列表只使用一个。
我的目标是这样的:
{
"list_1": {
"1": ".cat-3",
"2": ".cat-5",
"3": ".cat-7"
},
"list_2": {
"1": ".eyes-blue",
"3": ".eyes-brown"
},
"list_3": {
"1": ".jazz",
"2": ".commercial",
"3": ".hip-hop"
}
}我想得到的输出是:
.cat-3.eyes-blue.jazz
.cat-3.eyes-blue.commercial
.cat-3.eyes-blue.hip-hop命令并不重要。关键是在字符串中只使用来自每个list_对象的一个值。因此,例如,这样做是可以的:
.eyes-blue.jazz.cat-3
.eyes-blue.cat-3.commercial
.hip-hop.eyes-blue.cat-3还有更多的例子:
.cat-3.eyes-brown.jazz
.cat-5.eyes-brown.hip-hop
.cat-7.eyes-blue.hip-hop发布于 2014-10-28 19:40:09
将属性对象的值存储为数组的数组:
var arrayOfArrays = [];
_.each(obj, function(item, key) {
var itemVals = [];
_.each(item, function(item2, key2) {
itemVals.push(item2);
});
arrayOfArrays.push(itemVals);
});实现suffle()函数,如下所述:https://stackoverflow.com/a/2450976/2193416
实现一个函数以获得一个随机数组元素:
function randomElement(array) {
return array[Math.floor(Math.random() * array.length)];
}实现一个函数,从数组中选择随机元素作为级联字符串:
function randomCombination(arrayOfArrays) {
var output = "";
_.each(arrayOfArrays, function(innerArray) {
output += randomElement(innerArray);
})
return output
}现在,您可以通过执行以下操作来获得所需的输出:
randomCombination(shuffle(arrayOfArrays));或者,如果您想保持arrayOfArrays原封不动:
randomCombination(shuffle(arrayOfArrays.slice(0)));发布于 2016-04-29 05:46:46
相反,您可以使用first的zip函数,它创建一个分组元素数组,其中第一个元素包含给定数组的第一个元素,第二个元素包含给定数组的第二个元素,依此类推。
_.zip(['fred', 'barney'], [30, 40], [true, false]);
// → [['fred', 30, true], ['barney', 40, false]]https://stackoverflow.com/questions/26607055
复制相似问题