尝试将无限数量的对象数组转换为矩阵。
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;)将返回值作为数组。
如果可以将参数连接到调用函数,我可以使用其中一个现有函数。
答案 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
的数组将包含height
和weight
的所有可能组合。
另一种方法是使用数组的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]});
}
}