gpt4 book ai didi

javascript - 将对象数组随机拆分为两个相等的数组

转载 作者:行者123 更新时间:2023-11-28 10:37:02 25 4
gpt4 key购买 nike

我有这个对象数组;

let persons = [
{id: 1, name: "..."},
{id: 2, name: "..."},
{id: 3, name: "..."},
{id: 4, name: "..."},
{id: 5, name: "..."},
{id: 6, name: "..."},
{id: 7, name: "..."},
{id: 8, name: "..."}
]

我想将此数组拆分为两个长度相等的数组。每次执行分割数组的函数时,它应该在每个数组中返回一个随机数据,而不是相同的对象列表。

我尝试使用这个功能

function splitArr(data, part) {
let list1 = [];
let list2 = [];
for(let i = 0; i < data.length ; i++) {
let random = Math.floor(Math.random() * data.length);
if(random % 2 === 0) {
list1.push(data[i]);
} else {
list2.push(data[i]);
}

}
return [list1, list2];
}

该函数每次都会返回完全相同长度的数组,这一点并不明显。有时它返回 2 个和 6 个元素不相等的数组。

enter image description here

最佳答案

只需随机打乱数组,然后将数组拼接成两半即可。

要对数组进行混洗,请采用提供的解决方案 here .

function shuffle(a) {
var j, x, i;
for (i = a.length - 1; i > 0; i--) {
j = Math.floor(Math.random() * (i + 1));
x = a[i];
a[i] = a[j];
a[j] = x;
}
return a;
}

要从中获取两个列表,请执行以下操作:

let list2 = shuffle([...data]); // spread to avoid mutating the original
let list1 = list2.splice(0, data.length >> 1);

移位运算符>>用于获取数组长度的 chop 一半。

关于javascript - 将对象数组随机拆分为两个相等的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59824504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com