var value = [{
    "rowid": "one, two, three"
}, {
    "rowid": "four"
}]

var selected = value.map(function(varId) {
    return varId.rowid.toString();
});
console.log(selected);
console.log(selected.length);

La sortie que j'obtiens est

["one, two, three", "four"]
2

Mais j'attends

["one", "two", "three", "four"]
4

Comment cela peut-il être fait?

2
Prateek Agarwal 8 mars 2016 à 18:01

4 réponses

Meilleure réponse

Utilisez String#split() et Array#reduce():

var value = [{ "rowid": "one, two, three" }, { "rowid": "four" }],
    selected = value.reduce(function (r, a) {
        return r.concat(a.rowid.split(', '));
    }, []);

document.write('<pre>' + JSON.stringify(selected, 0, 4) + '</pre>');
3
Nina Scholz 8 mars 2016 à 15:14

Vous devrez diviser votre première chaîne par la virgule (','), puis aplatir le tableau multidimensionnel.

var value = [{
    "rowid": "one, two, three"
}, {
    "rowid": "four"
}];

var selected = value.map(function(varId) {
    return varId.rowid.toString().split(', ');
});    
// [ [ 'one', 'two', 'three' ], [ 'four' ] ]
selected = [].concat.apply([], selected);
// [ 'one', 'two', 'three', 'four' ]
console.log(selected);
console.log(selected.length);
0
PostCrafter 8 mars 2016 à 15:14

Essaye ça:

var sel = value.map(function(varId) {
    var rowId = varId.rowid.toString();
    var splitted = rowId.split(",");    
    return splitted;
});
var arrayOfStrings = [].concat.apply([], sel);
for (int i = 0; i < arrayOfStrings.length; i++){
   arrayOfStrings[i] = arrayOfStrings[i].trim();
}
0
Pavol 8 mars 2016 à 15:20

Comme mentionné dans le commentaire, il s'agit d'un tableau d'objets et non d'un tableau de tableaux essayez quand même return varId.rowid.toString().split(',');

0
whd 8 mars 2016 à 15:07