javascript - unicos - Contar las ocurrencias en la matriz de valores dados de otra matriz
substring javascript (3)
Necesita usar una variable diferente en el segundo ciclo for o eliminarlo todos juntos:
for(var i=0; i< namesArray.length; i++) {
var count = 0;
for(var i = 0; i < namesSerieArray.length; ++i){
if(namesSerieArray[i] == namesArray[i])
count++;
}
Estás revisando cada par 1 con 1, 2 con 2, 3 con 3 solamente. Debería hacer variables separadas si desea verificar cada par de índices (1 con 1, 1 con 2 ...). Ex:
for(var i=0; i< namesArray.length; i++) {
var count = 0;
for(var j = 0; j < namesSerieArray.length; j++){
if(namesSerieArray[i] == namesArray[j])
count++;
}
Estoy escribiendo un script para Google Spreadsheet.
Array 1 tiene una serie de nombres (más de 50 nombres diferentes)
John, Pete, Paul, ... Michael
Array 2 es una serie de nombres repetidos de los que reciben 50 (más de 10K en total)
Paul, Michael, Pete, John, Paul, Paul, Pete, Michael, Paul, Michael,... Michael
¿Cómo puedo hacer otra matriz con el número de apariciones (matriz 2) para cada nombre dado en la matriz 1?
La clasificación no es posible. Por lo tanto, la Matriz 3 debería tener en cuenta el orden de la Matriz 1. En este caso, por ejemplo:
1, 2, 3,... 4
He visto y comprobado cómo hacerlo si el orden no es importante (del Array 2, Array 1 se crea con nombres únicos y Array 3 contiene sus ocurrencias -> Contando las ocurrencias de los elementos del arreglo de JavaScript ), pero todos mis enfoques parecen no funciona Hasta ahora, tengo esto:
var namesCountArray = [];
namesArray = ss.getRange("CU3:CU" + rows + "").getValues();
namesSerieArray = ss.getRange("DF3:DF" + rows + "").getValues();
for(var i=0; i< namesArray.length; i++) {
var count = 0;
for(var i = 0; i < namesSerieArray.length; ++i) {
if(namesSerieArray[i] == namesArray[i])
count++;
}
namesCountArray.push([count]);
}
ss.getRange("DB3").setValue(namesCountArray);
// names we want to find
var names = ["john", "pete", "paul"];
// target list of names.
// john, pete, paul appear 2x
var target = ["john", "pete", "jack", "cindy", "thomas", "paul", "john", "pete", "paul"];
function finder(search, target) {
return search.map(function (val) {
return target.filter(function (e) {
return val === e;
}).length;
});
}
finder(names, target);
// => [2, 2, 2]
Demostración: http://jsfiddle.net/austinpray/v14o38ta/
Camina por la matriz2 y construye un objeto con cada clave como nombre y el valor como el número de sus ocurrencias.
p.ej
var array2 = ["Paul", "Michael", "Pete", ... /* 47 more names */ ];
var occurences = {};
for (var i = 0, l = array2.length; i++; i<l) {
if (occurences[array2[i]] === undefined) {
occurences[array2[i]] = 1;
}
else {
occurences[array2[i]]++;
}
}
luego recorra la primera matriz, verifique si el nombre está en las occurences
del objeto e occurences
su valor en una nueva matriz, como
var array1 = ["Paul", "Michael", "Pete", "John", "Steve", "Bill" ];
var array1Frequency = [];
for (var i = 0, l = array1.length; i++; i<l) {
array1Frequency.push(occurences[array1[i]] || 0)
}