#javascript #arrays #object #ecmascript-6 #mapping
#javascript #массивы #объект #ecmascript-6 #сопоставление
Вопрос:
Я застрял с отображением в массиве объектов. Пожалуйста, найдите приведенный ниже код
const array = [
{
user: "User1",
cities: ["city1", "city2", "city3"],
},
{
user: "User2",
cities: ["city2", "city3", "city4"],
},
];
let x = {};
array.map((item) => {
let user = item.user;
let cities = item.cities;
cities.map((city) => (x[city] = user));
});
Теперь он возвращается следующим образом:
const resArray = [{ city1: "User1", city2: "User2", city3: "User2", city4: "User2" }]
Я хочу, чтобы массив выглядел следующим образом:
const resArray = [
{ city1: ["User1"] },
{ city2: ["User1", "User2"] },
{ city3: ["User1", "User2"] },
{ city4: ["User2"] },
];
Может кто-нибудь, пожалуйста, помогите мне.
Спасибо
Комментарии:
1. Пожалуйста, не используйте
.map()
для простой итерации. Используйте.forEach
или фактический цикл. В этом случае кажется, что циклы — это самый простой путь вперед, так как вам нужно выполнять итерации и группировать одновременно.2. Примечание: «Я хочу, чтобы массив был таким» , который кажется очень неудобной структурой для использования. Почему не один объект с
city1
такими свойствами, как свойства?3. Спасибо за предложение @VLAZ и @ T.J. Crowder
Ответ №1:
Попробуй это
let x = {};
array.forEach((item) => {
item.cities.forEach((city) => {
x[city] = item.cities.includes(city) ? [...x[city] ? x[city] : [], item.user] : [];
});
});
Комментарии:
1. Пожалуйста, проверьте либо мой ответ, либо ответ ниже от sabbir.alam в качестве фактического ответа. Чтобы пометить ответ как принятый, нажмите на галочку рядом с ответом, чтобы переключить его с серого на заполненный. Спасибо!
Ответ №2:
Вы каждый раз назначали пользователя в город. Вместо этого x [city] должен быть массивом, и вы должны поместить нового пользователя внутрь этого массива.
Попробуйте это,
const array = [
{
user: "User1",
cities: ["city1", "city2", "city3"],
},
{
user: "User2",
cities: ["city2", "city3", "city4"],
},
];
let x = {};
array.map((item) => {
let user = item.user;
let cities = item.cities;
cities.map((city) => {
if(x[city] amp;amp; x[city].length) {
x[city].push(user);
} else{
x[city] = [user];
}
});
});
const res = Object.keys(x).map(key => { return {[key]: x[key]}});
console.log(res);
Комментарии:
1. Пожалуйста, не забудьте проверить решаемая, если этот ответ решает вашу проблему.
2. Я уже проверил все решения, все работают нормально. Еще раз спасибо