我有一个对象,其中包含Blob数组(这里用字符串表示!)和一个pictureIndex
,如下所示:
const data = {
pictures: ['blob1','blob2','blob3'],
pictureIndex: 0
}
shuffleArray(data.pictures);
注:pictureIndex
是'blob1'
的索引
我想打乱图片数组中的斑点以获得斑点的新的随机排列,但我想在最终打乱的数组中获得blob1
的索引。因此,如果混洗数据是这样的:
['blob2','blob3','blob1']
我想返回2作为'blob1'的pictureIndex
。。。
到目前为止,我可以像这样轻松地洗牌,而不知道如何修改pictureIndex
:
const data = {
pictures: ['blob1','blob2','blob3'],
pictureIndex: 0
}
shuffleArray(data.pictures);
function shuffleArray(array) {
let currentIndex = array.length, randomIndex;
while (0 !== currentIndex) {
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex--;
[array[currentIndex], array[randomIndex]] = [array[randomIndex], array[currentIndex]];
}
return array;
}
一种方法是生成shuffle函数,接受完整对象,然后返回带有shuffle数组和更新索引的完整对象。
这样一来,您就不需要再从搅乱的数组中找到索引了。
let data = {
pictures: ['blob1', 'blob2', 'blob3'],
pictureIndex: 0
}
data = shufflePictures(data);
console.log(data)
function shufflePictures(data) {
let currentIndex = data.pictures.length,
randomIndex;
while (0 !== currentIndex) {
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex--;
[data.pictures[currentIndex], data.pictures[randomIndex]] = [data.pictures[randomIndex], data.pictures[currentIndex]];
if (randomIndex === data.pictureIndex) {
data.pictureIndex = currentIndex
}
}
return data
}