Необходимо выполнить итерацию по массиву, чтобы получить определенные пары ключ: значение c для добавления к пустому объекту - PullRequest
1 голос
/ 17 июня 2020

Для этой проблемы функция принимает массив строк и возвращает объект. Ключи должны быть количеством символов в строке, а значение должно быть тем, сколько раз появлялась строка с таким количеством символов.

Я думал, что куда-то иду, а потом застрял. Буду признателен за помощь в этом, я пробовал погуглить миллион разных способов, но безуспешно. Спасибо!

Результат должен выглядеть так: characterCount (['яблоко', 'ягода', 'вишня']) // {5: 2, 6: 1}

function characterCount(arr){

  var newObj = {};
  var valueMax = 0;
  var  currentValue = 0;

  for(var i=0; i < arr.length; i++){
  var key = arr[i].length;
  for(var z=0; z < arr.length; z++){
    if (arr[z].length === arr[i].length){
      currentValue ++;
      if (currentValue > valueMax){
        valueMax = currentValue;
      }
    }
  }
  newObj.key = "valueMax";
}
return newObj;
}

Ответы [ 4 ]

3 голосов
/ 17 июня 2020

Посмотрите на функцию Array.prototype.reduce. Это позволяет вам брать массив, перебирать каждое значение и возвращать новое уменьшенное значение.

function characterCount(arr) {
  return arr.reduce((counts, str) => ({
    ...counts,
    [str.length]: (counts[str.length] || 0) + 1
  }), {});
}

const counts = characterCount(['apple', 'berry', 'cheery']);
console.log(counts);

В качестве альтернативы вы можете использовать Object.assign вместо распространения объекта-аккумулятора.

function characterCount(arr) {
  return arr.reduce((counts, str) => Object.assign(counts, {
    [str.length]: (counts[str.length] || 0) + 1
  }), {});
}

const counts = characterCount(['apple', 'berry', 'cheery']);
console.log(counts);
1 голос
/ 17 июня 2020

Вы можете просто reduce массив для выполнения sh вывода

function characterCount( array ) {
  return array.reduce( (agg, cur) => {
    // get the length of the current item
    const len = cur.length;
    // increase the value of the key index with one (if none exist, start with 0)
    agg[len] = (agg[len] || 0) + 1;
    // return the next value for the iteration
    return agg;
  }, {});
}

console.log( characterCount(['apple', 'berry', 'cherry']) );
0 голосов
/ 17 июня 2020

Использование reduce, возможно, лучше, но здесь более простой подход.

function characterCount(arr) {
  const countByLength = {};
  
  for (let item of arr) {
    countByLength[item.length] = (countByLength[item.length] || 0) + 1;
  }
  
  return countByLength;
}

console.log(characterCount(['apple', 'berry', 'cherry']));
0 голосов
/ 17 июня 2020

Если я правильно понял вопрос, вы просто хотите, чтобы возвращалась длина самого длинного слова?

function characterCount(arr)
{
  var largest = 0

  for(var i = 0; i < arr.length; i++)
  {
    var key = arr[i].length
    if (key > largest)
      largest = key
  }

  return largest
}

characterCount(['apple', 'berry', 'cherry'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...