如何在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的回答作为实际答案。要将答案标记为已接受,请单击答案旁边的复选标记将其从灰色切换为已填写。非常感谢。