#javascript #arrays #reactjs
#javascript #массивы #reactjs
Вопрос:
У меня есть два массива объектов, то есть источник и место назначения. Я пытаюсь найти все возможные комбинации, которые можно создать из двух массивов, чтобы создать окончательный массив. Пример:
origin = [
{
id: 1,
regionName: "Africa North"
},
{
id: 2,
regionName: "Africa West"
}
];
destination: [
{
id: 5,
regionName: "Gulf"
},
{
id: 8,
regionName: "Middle East"
},
{
id: 9,
regionName: "Central America"
}
]
Конечный массив должен дать мне,
finalArray = [
{
originRegion: "Africa North",
destinationRegion: "Gulf",
ts: "1606370160"
},
{
originRegion: "Africa North",
destinationRegion: "Middle East",
ts: "1606370160"
},
{
originRegion: "Africa North",
destinationRegion: "Central America",
ts: "1606370160"
},
{
originRegion: "Africa West",
destinationRegion: "Gulf",
ts: "1606370160"
},
{
originRegion: "Africa West",
destinationRegion: "Middle East",
ts: "1606370160"
},
{
originRegion: "Africa West",
destinationRegion: "Central America",
ts: "1606370160"
},
]
Я попытался найти некоторые перестановки и комбинации для двух массивов объектов, но не нашел подходящего ответа.
Это то, что я пытаюсь:
useEffect(() => {
var origin = [
{
id: 1,
regionName: "Africa North"
},
{
id: 2,
regionName: "Africa West"
}
];
var destination = [
{
id: 5,
regionName: "Gulf"
},
{
id: 8,
regionName: "Middle East"
},
{
id: 9,
regionName: "Central America"
}
];
var finalArray = []
for (var i = 0; i < origin.length; i ) {
for (var j = 0; j < destination.length; j ) {
finalArray.push(origin[i].regionName destination[j].regionName)
}
}
console.log("finalArray", finalArray)
}, []);
Заранее благодарю.
Комментарии:
1. Вы пытались изменить это решение в соответствии с вашими требованиями?
2. Да, я пытаюсь изменить это, пока мы говорим. Я делюсь тем, что я пытаюсь.
3. не уверен, что именно такое useEffect и ts, но вы могли бы изменить свои циклы for, чтобы получить желаемый результат: for (var i = 0; i < origin.length; i ) { for (var j = 0; j < назначение. длина; j ) { finalArray.push({originRegion: origin[i].RegionName, destinationRegion: destination[j].RegionName, ts: Date.now()}); } }
4. @RahulR. Большое спасибо за спасение дня. Я пишу код на React.js и крючки, поэтому я использовал useEffect, а ts — это просто временная метка. Еще раз спасибо.
Ответ №1:
Похоже, у вас есть часть с двойным циклом, но объект, который вы помещаете в свой массив, не соответствует вашим ожиданиям. Вы выполняете простую конкатенацию строк.
origin[i].regionName destination[j].regionName
Вот то, что я считаю более «реактивным» способом перебора данных и возврата результирующего массива. Уменьшите origin
массив в новый массив, сопоставив объединенный объект с destination
массивом.
origin.reduce(
(result, origin) => [
...result,
...destination.map((destination) => ({
originreagion: origin.regionName,
destinationRegion: destination.regionName,
ts: "1606370160" // <-- set your real timestamp here
}))
],
[]
);
const origin = [
{
id: 1,
regionName: "Africa North"
},
{
id: 2,
regionName: "Africa West"
}
];
const destination = [
{
id: 5,
regionName: "Gulf"
},
{
id: 8,
regionName: "Middle East"
},
{
id: 9,
regionName: "Central America"
}
];
const result = origin.reduce(
(result, origin) => [
...result,
...destination.map((destination) => ({
originreagion: origin.regionName,
destinationRegion: destination.regionName,
ts: "1606370160"
}))
],
[]
);
console.log(result)