【发布时间】:2018-03-29 11:48:38
【问题描述】:
下面的代码适用于普通数组,但不适用于带有对象的数组。有人知道该怎么做吗?
const array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
function shuffle(array) {
for (let i = array.length - 1; i > 0; i--) {
let j = Math.floor(Math.random() * (i + 1));
let temp = array[i];
array[i] = array[j];
array[j] = temp;
}
return array;
}
const result = shuffle(array);
console.log(JSON.stringify(result));
【问题讨论】:
-
你能详细说明一下数组的结构是什么样的吗?
-
“带对象的数组”是什么意思?
-
此代码与数组的内容无关。将所有数字替换为对象 - { id: 1 }、{ id: 2 } 等......你可以看到它。
-
根据我的经验,除了这种情况外,这可行:每个元素都是对象数组的关联数组。如果我将其中一个数组元素(它本身就是一个数组)传递给这个函数,那么这个数组就不会被打乱。但是,如果您修改代码以制作数组的副本,然后将其打乱并返回,那将起作用。您必须使用合法的数组复制方法,例如:newArray = [...array],换句话说,newArray = array 将不起作用。
标签: javascript arrays shuffle