Javascript从两个对象数组生成矩阵

时间:2015-01-12 13:21:00

标签: javascript arrays

尝试将无限数量的对象数组转换为矩阵。

height: [1,3,4,5,6,7]
weight: [23,30,40,50,90,100]

1 23
1 30
1 40
1 50
...
3 23
3 30
3 40
...

基本上将所有可能的组合映射到矩阵

我尝试使用underscore.js中的一些函数解决问题

                var firstOption = _.first( productOptionKeys );
                $.each( productOptions[ firstOption ].split(","), function(index, value){
                    var matrixRow = [];
                    var matricableOptionKeys = _.reject( productOptionKeys, function(option){ return (option == firstOption); }  );

                    matrixRow.push( value );

                    $.each( matricableOptionKeys, function( index, value ){
                        var matricableOptions = productOptions[ value ].split(",");
                        var matricIndex = 0;
                        for( i=0 ; i<matricableOptions.length; i++ ){
                            matrixRow.push( matricableOptions[ matricIndex ] );
                        }

                        //matricIndex ++;
//                      $.each( productOptions[ value ].split(","), function(index, value){
//                          matrixRow.push( value );
//                          return false;
//                      });
                    });

                    console.log( matrixRow );
                });

在我的情况下,对象稍微复杂一些,因为我必须将输入的字符串值拆分为数组。但为了便于提出解决方案,我省略了值是逗号分隔的字符串

这不是其他类似问题的重复,因为我试图获取对象的所有排列,如下面

Object { Height: "23,45,190,800", Width: "11",14",15",20"", Color: "Red,Green,Blue" }

现有解决方案仅查找数组的排列,而不是对象。每个键的值将始终以逗号分隔,因此object [key] .split(&#34;,&#34;)将返回值作为数组。

如果可以将参数连接到调用函数,我可以使用其中一个现有函数。

2 个答案:

答案 0 :(得分:6)

当然,你可以使用双人:

var result = [];
for(var i=0; i<height.length; i++)
    for(var j=0; j<weight.length; j++)
        result.push({ height: height[i], weight: weight[j]});

末尾名为result的数组将包含heightweight的所有可能组合。

另一种方法是使用数组的forEach方法:

var result = [];
height.forEach(function(h){
    weight.forEach(function(w){
         result.push({ height: h, weight: w});    
    });
});

答案 1 :(得分:1)

试试这个

var height = [1,3,4,5,6,7];
var weight = [23,30,40,50,90,100];
var res = [];

for(h = 0; h < height.length; h++) {
  for(w = 0; w < weight.length; w++) {
    res.push({h: height[h], w: weight[w]});
  }
}