2015-11-10 2 views
-1

// РешеноПодсчет строк в массиве, JavaScript

У меня есть массив со строками. Мне нужно подсчитать, сколько букв из каждой буквы в массиве.

Моя функция:

... 
    for (var k=0; k<=arrB.length; k++) { //Index of the array 
     for(var t=0; t<arrB.length; t++) { 
      if(p==arrB[k[t]]){ 
    count++; 
    }} 
    }numb.push(count); 
    } 
    var inNumber; 
    for(var q=0; q< numb.length; q++) { 
    if(numb[q]>0) { 
     var letterR=q+65; //Number in letter 
     inNumber=String.fromCharCode(letteR); 
    showResult(inNumber); 
    showResult(numb[q]); 
    ... 

Почему мой счетчик всегда 0? Будь благодарен за каждую небольшую помощь и совет. Благодаря!

+1

Так что же вопрос * точно? Вы, вероятно, синтаксическая ошибка, потому что ваш цикл 'for' прямо перед этим' if' имеет регулярную скобку '(' вместо фигурной скобки '{'. –

+1

Для чего это стоит, у JS есть фактические bools. Поэтому вместо того, чтобы иметь 'isFalse = 0' (что является странным именем для переменной, но что угодно), вы можете фактически использовать 'isFalse = false', а затем делать' isFalse = true'. –

+0

(подход OP в полностью отформатированном комментарии к ответу Мэтта Бурланда). – greybeard

ответ

1

Подсчет букв в массиве строк должен быть довольно прямым. Например, вы могли бы сделать это:

var arr=["ABC","CAG","ZXZ"]; 
 

 
var letterCount = arr.reduce(function(p,c) { 
 
    for (var i=0; i < c.length; i++) { 
 
     if (p[c[i]]) { 
 
      p[c[i]]++; 
 
     } 
 
     else { 
 
      p[c[i]] = 1; 
 
     } 
 
    } 
 
    return p; 
 
},{});

Который даст вам объект letterCount который выглядит следующим образом:

{ 
    "A": 2, 
    "B": 1, 
    "C": 2, 
    "G": 1, 
    "Z": 2, 
    "X": 1 
} 

Что вы делаете перебор массива и для каждой строки, итерации по строке. Для каждой буквы вы проверяете объект (p), который скрепляется буквой. Если письмо еще не существует в объекте, вы добавляете его и устанавливаете его значение 1. Если он существует, вы просто увеличиваете его на единицу.

+0

Спасибо большое! Только один вопрос, не нужно ли сравнивать этот p [c [i]] с чем-то? –

+0

@DianaPapukchieva: Нет. 'Undefined' считается * ложным *. –

+0

И почему вы это положили? , {}) –

1

Разделите каждую строку на массив букв, подсчитывающих каждое событие по пути.

function countLetters(arr) { 
    return arr.reduce(function (counts, str){ 
     str.split('').forEach(function (letter) { 
      counts[letter] ? counts[letter]++ : counts[letter] = 1; 
     }); 
     return counts; 
    }, {}); 
}; 

// Example 

var arr = ['ABC', 'BCD', 'CDE']; 
console.log(countLetters(arr)); 
// Logs: Object {A: 1, B: 2, C: 3, D: 2, E: 1} 
+0

Если я правильно понимаю вопрос, подсчет более специализирован, чем это. Обратите внимание на ожидаемый результат для Z. – deceze

+2

Я думаю, что это опечатка. Сначала он говорит: «У меня есть массив с 10 строками, каждая строка состоит из 10 букв. Мне нужно подсчитать, сколько букв из каждой буквы в массиве. ' – pmandell

+1

Не поставил бы на него. Сколько групп будет отображаться в письме, также будет действительным подсчетом. – deceze

1

Прежде всего в вас, например у вас есть объект {} не массив - пожалуйста, исправить это. Решение

var arr = ["ABC", "CAG", "ZXZ"]; 

var result = {}; 

arr.forEach(function(item) { 
    for(var i = 0; i < item.length; i++) { 
    var letter = item.charAt(i); 

    if (!result[letter]) { 
     result[letter] = 0; 
    }    

    result[letter] += 1; 
    } 

}); 
+0

Технически у них тоже нет объекта. Это просто недопустимый синтаксис. –

Смежные вопросы