如何通过连接两个对象数组获得所需的输出



我有两个具有共同键pin的对象数组和一个空的客户数组。我正试图将它们结合起来,如预期输出所示,但不知道如何进行。你能给我一些如何实现这个目标的建议吗?

我尝试切片array2数据,然后手动推数据到array1客户键,但我得到重复。请帮帮我。

<<p>Array1数据/strong>
[
{ "id": 1, "email": "pwitterick0@uol.com.br", "pin": 600090, "customer": [] },
{ "id": 2, "email": "ssivorn1@pagesperso-orange.fr", "pin": 600090, "customer": [] },
{ "id": 3, "email": "nlawford2@usatoday.com", "pin": 600090, "customer": [] },
{ "id": 4, "email": "rclipsham3@vistaprint.com", "pin": 600090, "customer": []},
]
<<p>Array2数据/strong>
[
{
"id": 1,
"first_name": "Amble",
"last_name": "Huntly",
"email": "ahuntly0@symantec.com",
"gender": "Male",
"addr": "30 Badeau Circle",
"pin": 600090
},
{
"id": 2,
"first_name": "Karlene",
"last_name": "Forrest",
"email": "kforrest1@rediff.com",
"gender": "Female",
"addr": "9417 Sutherland Avenue",
"pin": 600090
},
{
"id": 3,
"first_name": "Mel",
"last_name": "Kayley",
"email": "mkayley2@xinhuanet.com",
"gender": "Female",
"addr": "7 Sage Crossing",
"pin": 600090
},
{
"id": 4,
"first_name": "Nissa",
"last_name": "Abelov",
"email": "nabelov3@macromedia.com",
"gender": "Female",
"addr": "2906 Fairfield Circle",
"pin": 600090
},
{
"id": 5,
"first_name": "Benn",
"last_name": "Calbrathe",
"email": "bcalbrathe4@amazon.de",
"gender": "Bigender",
"addr": "2914 Steensland Avenue",
"pin": 600090
},
{
"id": 6,
"first_name": "Hobard",
"last_name": "Toffanini",
"email": "htoffanini5@simplemachines.org",
"gender": "Genderfluid",
"addr": "33695 Luster Street",
"pin": 600090
},
{
"id": 7,
"first_name": "Jabez",
"last_name": "Arlidge",
"email": "jarlidge6@spotify.com",
"gender": "Male",
"addr": "1827 Harper Parkway",
"pin": 600090
},
{
"id": 8,
"first_name": "Mitchel",
"last_name": "Jessard",
"email": "mjessard7@ask.com",
"gender": "Male",
"addr": "52 Fieldstone Pass",
"pin": 600090
},
{
"id": 9,
"first_name": "Robbyn",
"last_name": "Kenningley",
"email": "rkenningley8@imdb.com",
"gender": "Female",
"addr": "44447 Golf Course Terrace",
"pin": 600090
},
{
"id": 10,
"first_name": "Jaynell",
"last_name": "todor",
"email": "jtodor9@hexun.com",
"gender": "Female",
"addr": "3 Shoshone Junction",
"pin": 600090
},
]

我希望新数组的长度为Array1,即4。我只想把customer数组在Array1的每个对象中与Array2对象相等地填充除了最后一个.

所以每个客户得到Math.round(Array2.length/Array1.length)也就是2。我希望array1的每个对象中的每个客户键都被数组2的2个对象填充。如下所示。最后一个人被分配了剩余的对象,因为array1中没有更多的用户了。

预期输出

[
{
"id": 1,
"email": "pwitterick0@uol.com.br",
"pin": 600090,
"customer": [
{
"id": 1,
"first_name": "Amble",
"last_name": "Huntly",
"email": "ahuntly0@symantec.com",
"gender": "Male",
"addr": "30 Badeau Circle",
"pin": 600090
},
{
"id": 2,
"first_name": "Karlene",
"last_name": "Forrest",
"email": "kforrest1@rediff.com",
"gender": "Female",
"addr": "9417 Sutherland Avenue",
"pin": 600090
}
]
},
{
"id": 2,
"email": "ssivorn1@pagesperso-orange.fr",
"pin": 600090,
"customer": [
{
"id": 3,
"first_name": "Mel",
"last_name": "Kayley",
"email": "mkayley2@xinhuanet.com",
"gender": "Female",
"addr": "7 Sage Crossing",
"pin": 600090
},
{
"id": 4,
"first_name": "Nissa",
"last_name": "Abelov",
"email": "nabelov3@macromedia.com",
"gender": "Female",
"addr": "2906 Fairfield Circle",
"pin": 600090
}
]
},
{
"id": 3,
"email": "nlawford2@usatoday.com",
"pin": 600090,
"customer": [
{
"id": 5,
"first_name": "Benn",
"last_name": "Calbrathe",
"email": "bcalbrathe4@amazon.de",
"gender": "Bigender",
"addr": "2914 Steensland Avenue",
"pin": 600090
},
{
"id": 6,
"first_name": "Hobard",
"last_name": "Toffanini",
"email": "htoffanini5@simplemachines.org",
"gender": "Genderfluid",
"addr": "33695 Luster Street",
"pin": 600090
}
]
},
{
"id": 4,
"email": "rclipsham3@vistaprint.com",
"pin": 600090,
"customer": [
{
"id": 7,
"first_name": "Jabez",
"last_name": "Arlidge",
"email": "jarlidge6@spotify.com",
"gender": "Male",
"addr": "1827 Harper Parkway",
"pin": 600090
},
{
"id": 8,
"first_name": "Mitchel",
"last_name": "Jessard",
"email": "mjessard7@ask.com",
"gender": "Male",
"addr": "52 Fieldstone Pass",
"pin": 600090
},
{
"id": 9,
"first_name": "Robbyn",
"last_name": "Kenningley",
"email": "rkenningley8@imdb.com",
"gender": "Female",
"addr": "44447 Golf Course Terrace",
"pin": 600090
},
{
"id": 10,
"first_name": "Jaynell",
"last_name": "todor",
"email": "jtodor9@hexun.com",
"gender": "Female",
"addr": "3 Shoshone Junction",
"pin": 600090
}
]
}
]

您可以使用forsplice()来完成此操作

const arr1 = [{
id: 1,
email: "pwitterick0@uol.com.br",
pin: 600090,
customer: []
},
{
id: 2,
email: "ssivorn1@pagesperso-orange.fr",
pin: 600090,
customer: []
},
{
id: 3,
email: "nlawford2@usatoday.com",
pin: 600090,
customer: []
},
{
id: 4,
email: "rclipsham3@vistaprint.com",
pin: 600090,
customer: []
},
];
const arr2 = [{
id: 1,
first_name: "Amble",
last_name: "Huntly",
email: "ahuntly0@symantec.com",
gender: "Male",
addr: "30 Badeau Circle",
pin: 600090,
},
{
id: 2,
first_name: "Karlene",
last_name: "Forrest",
email: "kforrest1@rediff.com",
gender: "Female",
addr: "9417 Sutherland Avenue",
pin: 600090,
},
{
id: 3,
first_name: "Mel",
last_name: "Kayley",
email: "mkayley2@xinhuanet.com",
gender: "Female",
addr: "7 Sage Crossing",
pin: 600090,
},
{
id: 4,
first_name: "Nissa",
last_name: "Abelov",
email: "nabelov3@macromedia.com",
gender: "Female",
addr: "2906 Fairfield Circle",
pin: 600090,
},
{
id: 5,
first_name: "Benn",
last_name: "Calbrathe",
email: "bcalbrathe4@amazon.de",
gender: "Bigender",
addr: "2914 Steensland Avenue",
pin: 600090,
},
{
id: 6,
first_name: "Hobard",
last_name: "Toffanini",
email: "htoffanini5@simplemachines.org",
gender: "Genderfluid",
addr: "33695 Luster Street",
pin: 600090,
},
{
id: 7,
first_name: "Jabez",
last_name: "Arlidge",
email: "jarlidge6@spotify.com",
gender: "Male",
addr: "1827 Harper Parkway",
pin: 600090,
},
{
id: 8,
first_name: "Mitchel",
last_name: "Jessard",
email: "mjessard7@ask.com",
gender: "Male",
addr: "52 Fieldstone Pass",
pin: 600090,
},
{
id: 9,
first_name: "Robbyn",
last_name: "Kenningley",
email: "rkenningley8@imdb.com",
gender: "Female",
addr: "44447 Golf Course Terrace",
pin: 600090,
},
{
id: 10,
first_name: "Jaynell",
last_name: "todor",
email: "jtodor9@hexun.com",
gender: "Female",
addr: "3 Shoshone Junction",
pin: 600090,
},
];
const count = Math.floor(arr2.length / arr1.length);
for (let i = 0; i < arr1.length; i++) {
const remaining = arr2.length;
if (i === arr1.length - 1) {
arr1[i].customer.push(...arr2);
break;
}
arr1[i].customer.push(...arr2.splice(0, count));
}
console.log(arr1);

我们将arr1定义为第一个array,arr2定义为第二个array:

let fillCustomers = function(arr1, arr2) {
const customerPerArray = Math.floor(arr2.length / arr1.length);
for(let el of arr1) {
for(let i = 0; i < customerPerArray; ++i) {
el.customer.push(arr2.shift());
}
}
for(let i in arr2) {
arr1[i].customer.push(arr2.shift());
}
return arr1;
}
let result = fillCustomers([...arr1], [...arr2]);
console.log(result);