2016-12-17 2 views
0

что я пытаюсь сделать, это создать массив, в котором я буду держать рейтинги фильмов у пользователей, которые оценили те же фильмы, что и у меня. Мне нужны эти пользователи в отдельном массиве в зависимости от размер my_ratings. Это означает, что если мои оценки были сделаны из 3-х фильмов я должен иметь movie_users [1] = все user_ids, которые имеют скорость и этот фильм 1 ... то же самое для movie_users [2] и movie_users [3] ..javascript добавить в массив динамический индекс

for(var i = 0; i < my_ratings.length; i++){ 
     for(var j=0; j < user_movie_rating.length; j++){ 
     if(my_ratings[i].movie_id == user_movie_rating[j].movieId){ 
      movie_users[i].push(user_movie_rating[j].userId); 
      } 
     }        
    } 

Как я могу это сделать?

+2

Вы можете проиллюстрировать свою потребность некоторыми данными ... пожалуйста, посмотрите здесь: [mcve] –

+0

Просьба предоставить примеры данных и результат, который вы ожидаете от этих данных. – trincot

+1

вы уверены в 'movie_users [i] .push', ссылка с' i'? –

ответ

0

Вы можете использовать хеш-таблицу и перебирать только один раз для обоих массивов.

В первом контуре над user_movie_rating установить хэш-таблицу с фактическим рейтингом объектом, а во втором цикле по my_ratings проверке и нажмите userId к movie_users с фактическим индексом.

var hash = Object.create(null); 

user_movie_rating.forEach(function (rating) { 
    hash[rating.movieId] = rating; 
}); 

my_ratings.forEach(function (rating, i) { 
    if (hash[rating.movie_id]) { 
     movie_users[i].push(hash[rating.movieId].userId); 
    } 
}); 

С ES6 вы могли бы использовать Set вместо объекта.

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