我正在使用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
答案 0 :(得分:1)
将属性对象的值存储为数组数组:
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)));
答案 1 :(得分:0)
相反,您可以使用lodash的zip函数创建一个分组元素数组,第一个元素包含给定数组的第一个元素,第二个元素包含给定数组的第二个元素,依此类推。
_.zip(['fred', 'barney'], [30, 40], [true, false]);
// → [['fred', 30, true], ['barney', 40, false]]