Повторы слов

var getRepeats = function(arr) {
var count = {};
for (var i = 0; i < arr.length; i++) {
if (count[arr[i]] === undefined) {
count[arr[i]] = 1;
} else {
count[arr[i]]++;
}
}
return count;
};

2 лайка

var getRepeats = function(words) {
var valueWords = {};

for (var i = 0; i < words.length; i++) {

var index = 0;

var array = [];

for (var j = 0; j < words.length; j++) {
  if (words[j] === words[i]) {
    array[index] =  words[j];
    index++;
  } else {
    continue;  
  }
  valueWords[words[j]] = array.length;
}    

}

return valueWords;
}

1 лайк

var object = {
}

var getRepeats = function(mass){
for(var i=0;i<=mass.length - 1;i++){
var name = mass[i];
object[name] = 0;

 for(var j=0;j<=mass.length - 1;j++){
  if(mass[i] === mass[j]){
    object[name] += 1;

}
}
}
return object
}

let getRepeats = function(currentArray) {
//создаем обьект
  let objectRepeats = {};
//проходим массив циклом
  for(let i = 0; i < currentArray.length; i++){
// обьявляем элемент массива в итерации названием свойства обьекта
    let currentObjProp = objectRepeats[currentArray[i]];
// проверка на undefinded
    if(!currentObjProp) {
     objectRepeats[currentArray[i]] = 1;
    } else {
     objectRepeats[currentArray[i]] += 1;
    }
  }
  return(objectRepeats);
}
1 лайк

Т.е. только так можно добавить свойство в объект?

1 лайк

Можно с помощью точечной нотации, но в таком случае не выйдет использовать значение переменной (в этом случае значение элемент массива) как свойство обьекта, ровно как и прочитать его при проверке на undefinded

1 лайк

Здравствуйте, мне непонятно что значит: “Переменная хранит ссылку на объект.”

У меня возникли затруднения, когда я захотел поменять местами объекты в отсортированном массиве.

Если создать объект, а после его задать другой переменной - второй объект(копия) не создастся, поэтому при изменении объекта по переменной-ссылке изменяться будет оригинальный объект. Грубо говоря - обе переменные хранят лишь ссылку на объект, а не его самого

 *//пишем функцию *
let getRepeats = function(array) {

*//создаем пустой объект*
let object = {};

*//запускаем цикл (переберем полученный массив)*
for (let i=0; i<array.length; i++){

  *//если элемента из массива нет в объекте*
  if (!(array[i] in object)){

    *//добавляем элемента в объект в виде ключа со значением 1*
    object[array[i]] = 1;
    } else {

      *//если таков элемент уже есть, добавляем его значению единицу*
      object[array[i]] += 1;}

}

*//выводим результат (заполненный объект)*
return object;

};

2 лайка

Помогите, пожалуйста, понять, в чем ошибка. Решил сделать так:

let getRepeats = function (array) {

let obj = {};
  for (let y = 0; y <= array.length-1; y++) {
  if (array.indexOf[array[y]] !== array.lastIndexOf[array[y]]) {
     obj[array[y]] ++
    }
    else {
     obj[array[y]] = 1;
      }}
    return obj  
  }

У меня все элементы массива в объекте = 1 в итоге. Почему не работает obj[array[y]] ++? Никак не могу понять, в чем ошибка. Спасибо за ответ

var getRepeats = function(arr) {
var name = {};
for(i = 0; i < arr.length-1; i++) {
var count = 1;
for(var j = i+1; j < arr.length; j++) {
if(arr[i] === arr[j]) {
count++;
}
}
if(!name[arr[i]]) {
name[arr[i]] = count;
}
}
return name;
}

let getRepeats = function(arr) {
  let object = {};
   
  for (let i = 0; i < arr.length; i++) {
    object[arr[i]] = 0;
    for (let j = 0; j < arr.length; j++) {
   if (arr[i] === arr[j]) {
        object[arr[i]]++;
        } 
      }
    }  
    return object;
  }

Такое решение имеет право на жизнь? и как можно проще и короче описать?

let getRepeats = function(array){
  let object = {}

  for(let i = 0; i < array.length; i++){
   let x = 0
    for(let j = 0; j < array.length; j++){
      if(array[i] == array[j]){
        x++
      }
    } 
    object[array[i]] =  x
  }
  return object;
}

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

решение оказалось проще и совсем на поверхности, надеюсь убитые на обдумывание часы – не напрасная трата времени…

const getRepeats = function(words) {
  let obj = {}
  for (let word of words) {
    obj[word] === undefined ? obj[word] = 1: obj[word]++
  }
  return obj
}
для любителей кода в одну строку
const getRepeats = words => words.reduce((obj, word) => (obj[word] === undefined ? obj[word] = 1: obj[word]++, obj), {})

Мой вариант, с использованием только того, что проходили в курсе

let getRepeats = function (array) {
let words = { }
for (let i = 0; i<array.length; i++){

let current = words[array[i]] 
if (words[array[i]] >= 1) {
  words[array[i]]++
  } else {
     words[array[i]] = 1
    }

}
return words
}

1 лайк

оч помогло объяснение. Спасибо