How can i shuffle the repeater item on page load?

Hi,

I want to shuffle repeater item which is connected to database everytime page loads, anyone could suggest me how can i do it.
My database items:
Headline (productName), Short Description(productDescrpition), Image (productImage), Price (price)

Maybe try something like:

let newDataOrder = [];
$w.onReady( () => {
  $w("#dataset1").onReady( () => {
    $w("#dataset1").getItems(0, 1000)
  .then( (results) => {
 let items = results.items;
 function shuffleArray(){
 if(items.length > 0){
 let randomElement = items.splice(Math.random() * items.length, 1);
          newDataOrder.push(randomElement[0]);
          shuffleArray();
      } else {
          $w("#repeater1").data = newDataOrder;
      }
  }
  shuffleArray();
  })
  })
})

or this one (faster):

let items;
function shuffleArray() {
 let itemsLength = items.length, lastItem, randomIndex;
 while (itemsLength) {
      randomIndex = Math.floor(Math.random() * itemsLength--);
      lastItem = items[itemsLength];
      items[itemsLength] = items[randomIndex];
      items[randomIndex] = lastItem;
  }
 return items;
}
$w.onReady( () => {
  $w("#dataset1").onReady( () => {
    $w("#dataset1").getItems(0, 1000)
    .then( (results) => {
      items = results.items;
    $w("#repeater1").data = shuffleArray(items);
  })
  })
})

Here’s a simple Shuffle Repeater example.

@jonatandor35 Thank you for your help is its work faster & good :wink:

@yisrael-wix Thanks for your help

I want one more favor is there any way in this repeater that top 10 clicked item in repeater will shows 1st & respectively? After that shows items randomly.

This is exactly what I was after, thank you so much! :smiley:

Is there any way of limiting this so that it only shows one item at a time? I have the dataset setting set to 1 in Wix, but on the live website it’s still showing all the items in my database at the same time?

@Paul I replied to your SO query . You can either use that or keep this code and do the below.

items = results.items;
let random = shuffleArray(items);
$w("#repeater1").data = [random[0]];