0

現在、jsPsych で記述された次のコードを実行しようとしています。

var likingRatingTask_1 = {
            timeline: [
                {
                    type: 'image-button-response-with-name',
                    stimulus: jsPsych.timelineVariable('food'),
                    choices: likingScale,
                    prompt: "I would like to eat this food right now, in its presented quantity.",
                    render_on_canvas: true,
                    name: jsPsych.timelineVariable('name'),
                    save_trial_parameters: {
                        name: true
                    }
                }
            ],
            timeline_variables: [
            {food: "Images/small_salad.jpeg", name: 'salad'},
            {food: "Images/small_pear.jpeg", name:'pear'},
            {food: "Images/small_lollipop.jpeg", name:'lollipop'},
            {food: "Images/small_grapes.jpeg", name:'grapes'},
            {food: "Images/small_cotton_candy.jpeg", name:'cotton candy'},
            {food: "Images/small_cookie.jpeg", name:'cookie'},
            {food: "Images/small_carrot.jpeg", name:'carrot'},
            {food: "Images/small_cake.jpeg", name:'cake'},
            {food: "Images/small_brownie.jpeg", name:'brownie'},
            {food: "Images/small_apple.jpeg", name:'apple'},
            {food: "Images/large_salad.jpeg", name:'salad'},
            {food: "Images/large_pear.jpeg", name:'pear'},
            {food: "Images/large_lollipop.jpeg", name:'lollipop'},
            {food: "Images/large_grapes.jpeg", name:'grapes'},
            {food: "Images/large_cotton_candy.jpeg", name:'cotton candy'},
            {food: "Images/large_cookie.jpeg", name:'cookie'},
            {food: "Images/large_carrot.jpeg", name:'carrot'},
            {food: "Images/large_cake.jpeg", name:'cake'},
            {food: "Images/large_brownie.jpeg", name:'brownie'},
            {food: "Images/large_apple.jpeg", name:'apple'}
            ], 
            randomize_order: true,
            on_timeline_finish: function() {
                var imageNames = [{name: 'salad'}, {name: 'pear'}, {name: 'lollipop'}, {name: 'grapes'}, {name: 'cotton candy'}, {name: 'cookie'}, {name: 'carrot'}, {name: 'cake'}, {name: 'brownie'}, {name: 'apple'}]; //list the category names
                var imageNames_shuffled = jsPsych.randomization.shuffle(imageNames); //shuffle the category names list
                console.log(imageNames_shuffled);
                var data = []; //create a data array
                var leftovers = []; //create a leftovers array
                var imagesNatural_temp = []; //create a temporary imagesNatural array
                var imagesHealthy_temp = []; //create a temporary imagesHealthy array

                for (let i = 0; i < imageNames_shuffled.length; i++) {
                    var responseData = jsPsych.data.getLastTimelineData().filter(imageNames_shuffled[i]).select('response').sum();
                    var pictureData = jsPsych.data.getLastTimelineData().filter(imageNames_shuffled[i]).select('stimulus').values;
                    var object = {
                        rating: responseData,
                        picture1: pictureData[0],
                        picture2: pictureData[1]
                    };
                    data.push(object);
                };
                console.log(data);
               
                function matchedAssignment(item) {
                    var x = item;
                    data.shift();
                    function findMatch(element) {
                        return element.response==x.response;
                    };
                    data.findIndex(findMatch);
                    if (data.findIndex(findMatch)!=-1) {
                        var y = data.splice(data.findIndex(findMatch), 1);
                        imagesNatural_temp.push(x);
                        imagesHealthy_temp.push(y[0]);
                    } else {
                        var z = jsPsych.randomization.sampleWithoutReplacement([imagesNatural_temp, imagesHealthy_temp], 1);
                        z[0].push(x);
                    }
                };
                data.forEach(matchedAssignment);
                

                
                
                
            }
        };
        finalTimeline.push(likingRatingTask_1);

console.log(imageNames_shuffled) を実行すると、コンソールは 10 個の要素を持つ配列を返します。しかし、console.log(data) を実行すると、コンソールは要素が 2 つしかない配列を返します。10 回実行したいのに、on_timeline_finish 関数が 2 回しか実行されないようです。何が起こっているのかについて誰かが考えを持っていますか? もしそうなら、ここであなたの洞察を共有していただけませんか?

4

0 に答える 0