Как получить указанный объект, ссылающийся на значение внутри (javascript)

0

Мне нужно установить объект свойства javascript с некоторыми значениями другого объекта свойства из того же экземпляра. Фактически у меня есть объект ниже:

var PLAYER = {
slides: {
{ slide_id: 60, slide_content: 'content for slide 1', type: 'slide' },
{ slide_id: 65, slide_content: 'content for slide 2', type: 'slide' },
{ slide_id: 70, slide_content: 'content for slide 3', type: 'slide' },
{ qId: 4, question: 'question text', after_slide: 70, type: 'question' },
{ slide_id: 74, slide_content: 'content for slide 5', type: 'slide' }
},
currentSlide: 0,
container: false,
currentCarouselSlide: 0,
carousel: {},
}

Теперь у меня есть массив вроде этого:

var carouselRandomSlides = [60,70];

Позже в моем объекте PLAYER меня есть функция, которая убирает мои слайды, подобные этому

<script>
    fetchSlide: function(index,increment) {
    var _this = this;
    $.post('/player/fetchSlide', { slideContent: _this.slides[index] }, function(response){
            increment ? (increment == 'increase' ? _this.currentSlide++ : _this.currentSlide--) : null; 
    $(_this.container).html(response);
    if (_this.slides[index].qId) {
    this.questions.correctAnswer = _this.slides[index].correct_answer;
    $.each(_this.slides[index].carousel, function(i,slideId) {
    _this.carousel[++i] = _this.slides[slideId];
    });
    } 
    else {
    _this.questions.correctAnswer = false;
    _this.carousel = {};
    } 
    console.log(_this.carousel);
    });     
    },
</script>

в этой функции я тестирую, если текущий слайд является вопросом, if (_this.slides[index].qId) и если да, то я динамически пытаюсь создать карусель, который будет содержать слайды 60 и 70. Не может быть никаких слайдов для игры или более двух... это не зависит от меня. Эта часть кода должна делать трюк

$.each(_this.slides[index].carousel, function(i,slideId) {
    _this.carousel[++i] = _this.slides[slideId];
});

но _this.slides[slideId] - то же самое с _this.slides[60] и актуальным мне нужно _this.slides[1]

Как я могу получить объект, который содержит slide_id: 60 в вышеуказанной функции $.each()?

заранее спасибо!

  • 1
    Вы хотели сделать Player.slides объектом, содержащим неназванные объекты? Похоже, это должен быть массив для меня. Это может быть вся ваша проблема прямо здесь.
Теги:

2 ответа

0
Лучший ответ
var PLAYER = {
   slides: [
      { slide_id: 60, slide_content: 'content for slide 1', type: 'slide' },
      { slide_id: 65, slide_content: 'content for slide 2', type: 'slide' },
      { slide_id: 70, slide_content: 'content for slide 3', type: 'slide' },
      { qId: 4, question: 'question text', after_slide: 70, type: 'question' },
      { slide_id: 74, slide_content: 'content for slide 5', type: 'slide' }
   ]

PLAYER.slides должен быть массивом.

Затем вы можете использовать $.grep() чтобы получить правильный элемент.

function getSlideById(id){
  return $.grep(PLAYER.slides, function(el,i){
    return el.slide_id === id;
  })[0]; // returns array so first item [0]
}

Подробнее о $.grep()

  • 0
    Извините, это не работает для меня ... но это, кажется, работает нормально $.each(_this.slides[index].carousel, function(i,slideId) { // _this.carousel[++i] = _this.slides[slideId]; $.each(_this.slides, function() { this.slide_id === slideId ? _this.carousel[++i] = this : null; }); });
0

Если вы имеете в виду Player.slides, вы, вероятно, захотите работать с массивом. Что-то вроде этого:

Примечание: этот код javascript не будет работать так, как есть, вам нужно будет его изменить.

var PLAYER = {
  slides: {
    [ slide_id: 60, slide_content: 'content for slide 1', type: 'slide' ],
    [ slide_id: 65, slide_content: 'content for slide 2', type: 'slide' ],
    [ slide_id: 70, slide_content: 'content for slide 3', type: 'slide' ],
    [ qId: 4, question: 'question text', after_slide: 70, type: 'question' ],
    [ slide_id: 74, slide_content: 'content for slide 5', type: 'slide' ]
  },
  currentSlide: 0,
  container: false,
  currentCarouselSlide: 0,
  carousel: {},
}

Чтобы получить внутренности, вы можете использовать метод javascript Array.indexOf(content).

Удачи.

  • 1
    У вас есть это задом наперед. PLAYER.slides должен быть массивом объектов, а не объектом массивов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню