Как отобразить массив объектов в Javascript

#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. Я уже проверил все решения, все работают нормально. Еще раз спасибо