J'ai le tableau suivant et je cherche à récupérer l'index du tableau d'origine (trié) où l'élément change et à quelle fréquence cet élément individuel existe.
ac = [0,3,5,10] ad = [3,2,5,2]
Le résultat souhaité devrait être comme ceci:
ab = [1,1,1,3,3,5,5,5,5,5,6,6]
Merci beaucoup pour toute suggestion.
Bravo.
4 Réponses :
Vous pouvez parcourir le tableau et vérifier le prédécesseur. Si égal, incrémentez le dernier décompte, sinon ajoutez l'index et un décompte de un.
var array = [1, 1, 1, 3, 3, 5, 5, 5, 5, 5, 6, 6],
{ indices, counts } = array.reduce((r, v, i, a) => {
if (a[i - 1] === v) {
r.counts[r.counts.length - 1]++;
} else {
r.indices.push(i);
r.counts.push(1);
}
return r;
}, { indices: [], counts: [] });
console.log(...indices);
console.log(...counts);
Ce code produit une sortie similaire à celle que vous avez publiée:
var ab = [1,1,1,3,3,5,5,5,5,5,6,6];
var ac = Array.from(new Set(ab.map((e) => ab.indexOf(e))));
var ad = [];
for (var i = 0; i < ac.length - 1; i++) {
ad.push(ac[i + 1] - ac[i]);
}
ad.push(ab.length - ac[ac.length - 1]);
console.log(...ab);
console.log(...ac);
console.log(...ad);
Essayez ceci, vous devriez obtenir ce que vous voulez
ab = [1,1,1,3,3,5,5,5,5,5,6,6];
var items = [];
var positions = [];
var count = [];
ab.map((item, index)=>{
//check if exist
let item_index = items.indexOf(item);
if(item_index == -1) {
items.push(item);
positions.push(index);
count.push(1);
} else {
let current_count = count[item_index];
count[item_index] = ++current_count;
}
});
console.log(positions);
console.log(count);
donc, en utilisant https://underscorejs.org/#groupBy , vous pouvez regrouper par valeur
{1: [1,1,1], 3: [3,3], 5: [5,5,5,5,5], 6: [6,6]}
vous obtiendrez un objet comme
_.groupBy([1,1,1,3,3,5,5,5,5,5,6,6]);
or
_.groupBy([1,1,1,3,3,5,5,5,5,5,6,6], function(num){ return num; })
donc si vous prenez tout https://underscorejs.org/#keys et parcourir, la valeur sous la clé est array, prendre la taille et l'ajouter au nouveau tableau, donc vous pouvez faire ad = [3,2 , 5,2]
encore une fois, parcourez les clés et obtenez https://underscorejs.org/ #indexOf , vous pouvez construire ac = [0,3,5,10]
jouer avec ces méthodes, vérifier des exemples, et vous pouvez le faire vous-même!
p >
Comment? Pouvez-vous expliquer le modèle?
Pourquoi 0 dans
ac? Serait-ce alors le cas pour chaque tableau avec au moins une valeur?Le premier élément de ac sera toujours 0, car à l'index 0 (premier élément du tableau) une nouvelle valeur apparaît. Il existe 3 fois dans le tableau, la première valeur de ad est donc définie sur 3.