迭代嵌套对象并使用Lodash连接到字符串

时间:2014-10-28 11:22:02

标签: javascript arrays object javascript-objects lodash

我正在使用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

2 个答案:

答案 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]]