Как пройти oop через массив и создать новый на основе первых значений - PullRequest
0 голосов
/ 06 августа 2020

Я хочу создать новый массив, содержащий сумму значений всех гласных для каждого слова. Функция characterLetter отлично работает при определении количества гласных в слове, но я не знаю, как создать массив, в котором каждое отправленное слово имеет свою собственную сумму соответствующих гласных. Моя цель - получить такой вывод массива:

Пример array = {"anne", "mike", "jiana"}

Ожидаемый результат = { name1 = 6 , (сумма 1 "A" и 1 "E") name2 = 14 , (сумма 1 "I" и 1 "E") name3 = 10 (сумма из 1 "I" и 2 "A")}

Вот это mi JS код:

function characterLetter(letter, character) {
  let countLetter = 0; 
  if (letter === character) {
    countLetter++;
  }   
  return countLetter;
}

function vowels(arr){
  ///////here I set the value I want for each letter
  let a, b, c, d, e, f, g, h, i, j, k, l, m, n, ñ, o, p, q, r, s, t, u, v, w, x, y, z;
  a=j=s= 1;
  b=k=t= 2;
  c=l=u= 3;
  d=m=v= 4;
  e=n=ñ=w= 5;
  f=o=x= 6;
  g=p=y= 7;
  h=q=z= 8;
  i=r= 9;

  let vowelsArray=0;

  arr.forEach(function (letter) {
    vowelsArray= (a * characterLetter(letter, "a")) + (e * characterLetter(letter, "e")) + (i *characterLetter(letter, "i")) + (o * characterLetter(letter, "o")) + (u * characterLetter(letter,"u")); 
  });   

  return vowelsArray;
}

Ответы [ 2 ]

0 голосов
/ 06 августа 2020

Вы хотите вот так: -

function findResult(arr) {
    const values = {'a': 1, 'e': 5, 'i': 9, 'o': 6, 'u': 3};
    const result = [];

    arr.forEach((word) => {
        let sum = 0;
        const match = {};

        for (const char of word) {
            if (!values[char]) continue;
            sum += values[char];
            match[char] = 1 + (match[char] || 0);
        }

        const d = Object.keys(match).map((m) => `${match[m]} "${m.toUpperCase()}"`);
        const matchStr = sum ? ', (Sum of ' + d.join(' and ') + ')': '';
        result.push(`${word}= ${sum} ${matchStr}`);
    });
    console.log(result);
}

const arr = ["anne", "mike", "jiana"];

findResult(arr);
0 голосов
/ 06 августа 2020

Просто сохраните веса необходимых символов в объекте и уменьшите каждое отдельное имя:

const weight = {
  a: 1,
  u: 3,
  e: 5,
  o: 6,
  i: 9
}

const names = ['anna', 'peter'];

const result = names.map(name => {
  return name.split('').reduce((sum, char) => {
    if(weight[char] != null) {
      sum += weight[char];
    }  
    
    return sum;
  }, 0);
});

console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...