Повторы слов 2/5

Когда вы принудительно вызываете console.log, ваша функция вызывается два раза, вместо одного (то есть её вызывает console.log в задании и вы), поэтому ваши окончательные результаты в два раза больше ожидаемых. Для того чтобы получить 100% в вашем случае достаточно убрать последнюю строчку.
Если вы хотите проверять при помощи console.log ваши ответы, вам нужно создавать массив внутри функции, чтобы он был локальным, а не глобальным. Таким образом, он будет создаваться каждый раз при вызове функции.
В случае же с глобальным объектом, каждый раз, когда вы будете делать с ним какие-либо операции, все они будут влиять на него в совокупности.

1 лайк

Понял, спасибо

Хех, решил аналогично 1 варианту, только с извращенной логикой ХД

Спойлеры!
function getRepeats (arr) {
  var quantityWord = {};
  for (item of arr) {

  if (quantityWord[item] >= 1) {
      quantityWord[item]++
      } else {
     quantityWord[item] = 1;
      } 
  }
  return quantityWord
}

Эх, reduce как то тяжеловато идет, вроде понимаю что он делает, но вот самому до подобной реализации фиг додумался бы.

Мой вариант:
const getRepeats = (arrWord,q={}) =>(arrWord.forEach(a=>q[a]=~~q[a]+1),q);

1 лайк

Так вот в чем дело! Дошло наконец-то. Спасибо!

Так можно?

let getRepeats = (data) => {
  let repeats = {};
  for (let i = 0; i < data.length; i++) {
    let count = 0;
    for (let j = 0; j < data.length; j++) {
      if (data[i] === data[j]) {
        count++;
        repeats[data[i]] = count;
        }
      }
    }
  return repeats;
}

все можно, только так будет работать очень долго
у вас второй цикл без дела болтается по сути

Как-то так

let getRepeats = function (arr) {
  let obj = {};
  arr.forEach(function (value) {obj[value] ? obj[value]++ : obj[value] = 1});
  return obj;
}

если так? :thinking:

let getRepeats = function (words) {
  let repeats = {}
  let withoutRepeat = [];
  for (i = 0; i < words.length; i++) {
    if (withoutRepeat.indexOf(words[i]) < 0) {
      withoutRepeat.push(words[i]);
      repeats[words[i]] = 1;
    } else {
      repeats[words[i]]++;
    }
  }
  return repeats;
};

1 лайк

Через пару минут допёр. Решение отличное. Не знаю, возможно ли короче.

приплел оператор continue и сравнение с undefined

   let getRepeats = function (array) {
      let words = { };
      for (i=0;i <= array.length-1 ;i++) {
        if (words[array[i]] === undefined) {
          words[array[i]] = 1;  
        } else if (words[array[i]] !== undefined) {
          continue;
        }
        for (j=i+1; j <= array.length-1;j++) {
        if (array[i] === array[j]) {
          words[array[i]] += 1;  
          }
        }
      }
      return words;
    };
1 лайк
  1. Первое решение:

     let getRepeats = function (arr) {
    let word = {}
          for (let i=0; i< arr.length; i++) {
     word[arr[i]] =  arr.filter(x => arr[i] === x).length;
      }
     return word
    

    }

  2. решение

    let getRepeats = function (arr) {
    return arr.reduce( (total, word) => {total[word] =(total[word] || 0) +1 ; return total;}, {});
    }

3 решение:

    let getRepeats = function (arr) {
let total = {};
arr.forEach(word => total[word] = (total[word] || 0) + 1)
return total
    }
let getRepeats = function (data) {
  return data.reduce(function (repeats, word) {
    repeats[word] = (repeats[word] || 0) + 1;
    return repeats;
  }, {});
}
1 лайк
let obj = {};

let getRepeats = function (array) {
  for (let i = 0; i <= array.length-1; i++){
    if (!(array[i] in obj)) {
      obj[array[i]] = 1;
    } else {
      obj[array[i]] += 1;
        }
      }
    
  return obj;
  }
1 лайк