Мне нужно установить объект свойства 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()
?
заранее спасибо!
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()
$.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; }); });
Если вы имеете в виду 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)
.
Удачи.
PLAYER.slides
должен быть массивом объектов, а не объектом массивов.
Player.slides
объектом, содержащим неназванные объекты? Похоже, это должен быть массив для меня. Это может быть вся ваша проблема прямо здесь.