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

标签 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

最佳答案

将属性对象的值存储为数组的数组:

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)));

关于javascript - 迭代嵌套对象并使用 Lodash 连接到字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26607055/

相关文章:

javascript - 观察 bool 值时AngularJS指令双向数据绑定(bind)不起作用

javascript - 将字符串转换为多维数组

php - 如何从 HTTP_ACCEPT_LANGUAGE 订购字符串

javascript - 从键/值对象对中查找最大值 Javascript

javascript - 将 p5js 添加到 Ember 应用程序

javascript - 如何使用 javascript 从 <input type ='file' .../> (间接)获取文件

jquery - 完全删除 JSON 中的行

Java:从加密文件解密时出现错误填充错误

java - java中的对象引用

Javascript:调用数组中每个对象的方法而不进行迭代