Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Javascript中映射对象数组_Javascript_Arrays_Object_Ecmascript 6_Mapping - Fatal编程技术网

如何在Javascript中映射对象数组

如何在Javascript中映射对象数组,javascript,arrays,object,ecmascript-6,mapping,Javascript,Arrays,Object,Ecmascript 6,Mapping,我一直在使用对象数组中的映射。 请查找下面的代码 const array = [ { user: "User1", cities: ["city1", "city2", "city3"], }, { user: "User2", cities: ["city2", "city3", "city4"

我一直在使用对象数组中的映射。 请查找下面的代码

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"] },
];
我想要这样的数组:

const resArray = [{ city1: "User1", city2: "User2", city3: "User2", city4: "User2" }]
const resArray = [
  { city1: ["User1"] },
  { city2: ["User1", "User2"] },
  { city3: ["User1", "User2"] },
  { city4: ["User2"] },
];
谁能帮帮我吗

谢谢

试试这个

let x = {};
array.forEach((item) => {
  item.cities.forEach((city) => {
    x[city] = item.cities.includes(city) ? [...x[city] ? x[city] : [], item.user] : [];
  });
});
试试这个

let x = {};
array.forEach((item) => {
  item.cities.forEach((city) => {
    x[city] = item.cities.includes(city) ? [...x[city] ? x[city] : [], item.user] : [];
  });
});

您每次都将用户分配到城市。相反,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] && 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);

您每次都将用户分配到城市。相反,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] && 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);

请不要使用
.map()
进行简单迭代。使用
.forEach
或实际循环。在这种情况下,循环似乎是最简单的方法,因为您需要同时进行迭代和分组。为什么不使用一个具有
city1
和属性的对象呢?感谢@VLAZ和@T.J.Crowder的建议。请不要使用
.map()
进行简单的迭代。使用
.forEach
或实际循环。在这种情况下,循环似乎是最简单的方法,因为您需要同时进行迭代和分组。为什么没有一个带有
city1
的对象,比如属性?谢谢你的建议@VLAZ和@T.J.CrowderThank you@sabbir.alam。如果这个答案解决了你的问题,请不要忘记检查已解决。我已经检查了所有的解决方案,所有的都很好。再次感谢您@sabbir.alam。如果这个答案解决了你的问题,请不要忘记检查已解决。我已经检查了所有的解决方案,所有的都很好。再次感谢Hanks@loana。它正在工作。请检查我的回答或下面来自sabbir.alam的回答作为实际答案。要将答案标记为已接受,请单击答案旁边的复选标记将其从灰色切换为已填写。非常感谢。谢谢@loana。它正在工作。请检查我的回答或下面来自sabbir.alam的回答作为实际答案。要将答案标记为已接受,请单击答案旁边的复选标记将其从灰色切换为已填写。非常感谢。