javascript - 在对象内组合数组的元素

标签 javascript arrays algorithm object recursion

trialObject : {
        'color': ['red','blue'],
        'size': ['s','m'],
        'material': ['cotton']
      }

// RECURSION FUNCTION TO MAKE COMBINATIONS

makeObjectVariants(selected){

      let key = Object.keys(selected)
      if(Object.keys(selected).length === 1){
        return selected[key[0]];
      } else {
        var result = [];
        var currentArray  = selected[key[0]]
        delete selected[key[0]] 
        var restObjects = this.makeObjectVariants(selected) // call function again

        for(var i = 0; i < restObjects.length; i++){
          for (var j = 0; j < currentArray.length; j++) {
            result.push([restObjects[i] +','+ currentArray[j]]);
          }
        }
        return result; // resultant array
      }
    }

// OUTPUT 
0:["cotton,s,red"]
1:["cotton,s,blue"]
2:["cotton,m,red"]
3:["cotton,m,blue"]

// EXPECTED OUTPUT 
[{'material':cotton,'size':s,'color':red},...]

我希望输出包含键值对,以便可以识别数组元素属于哪个组。

我在向生成的元素添加键时遇到问题,因为我无法跟踪对象键

最佳答案

如果您可以使用 ES6(默认参数、扩展运算符、箭头函数,...),则以下代码可以完成这项工作:

var trialObject  = {
    color: ['red','blue'],
    size: ['s','m'],
    material: ['cotton']
};

var result = buildCombinations(trialObject);

console.log(result); 

function buildCombinations(trialObject , keys = Object.keys(trialObject ), keyIndex = 0 , subObj = {}, res = []) {
    trialObject[keys[keyIndex]].forEach(element => {
        subObj[keys[keyIndex]] = element;
        keys[keyIndex + 1] ? buildCombinations(trialObject , keys, keyIndex + 1, subObj, res) : res.push({...subObj});
    });
    return res;
}

关于javascript - 在对象内组合数组的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48108413/

相关文章:

javascript - 为什么带有连字符 (-) 的 id 选择器不适用于 javascript

javascript - 如何遍历具有特定类的所有元素并在其中找到输入类型?

java - 如何从 .t​​xt 文件中读取数字并以单字数字的形式打印出来? IE。 30= 三个零 1= 一

algorithm - 一个圆可以装多少个正方形?

arrays - 3xN表的高效算法和存储格式

javascript - 我可以在 JavaScript 中包含另一个源文件吗?

javascript - 单击选项卡时关闭滑动菜单

javascript - 多维 Javascript 数组到 Php 页面

php - 对数组行编号

std::lower_bound 和 std::set::lower_bound 之间的 C++ 区别?