je code suivant:produit cartésien avec des tableaux imbriqués et les valeurs non numériques en javascript
filters = [
{
"see":false,
"make":true,
"means":true,
},
{
"less":false,
"up3":false,
"up6":false,
"all":true,
"more":false,
"var":false
},
{
"one":false,
"small":true,
"medium":false,
"large":false
}
];
function cartesianProductOf() {
return _.reduce(arguments, function(a, b) {
return _.flatten(_.map(a, function(x) {
return _.map(b, function(y) {
return x.concat([y]);
});
}), true);
}, [ [] ]);
}
function cleaning(collection){
var r = [];
_.each(collection,function(element,index){
r[index] = [];
if(_.isObject(element)){
r[index] = _.map(element,function(val,key){
if(val) return key;
});
}
r[index] = _.compact(r[index]);
});
return r;
}
// cleaning is producing following array
// [["make","means"],["all"],["small"]]
clean = cleaning(filters);
prod = cartesianProductOf(clean);
$('#result').append(JSON.stringify( prod));
Je me attends résultat le long des lignes: [["make","all","small"], ["means","all","small"]]
mais je suis en train de [[["make","means"]],[["all"]],[["small"]]]
à la place.
cartésienne algorithme produit est d'ici: Cartesian product of multiple arrays in JavaScript
ici est mon violon: https://jsfiddle.net/NFSfs/17/ Toute idée serait appréciée.
Remerciez toi! Quelle erreur évidente. –