Javascript 将对象列表转换为地图中的地图
Javascript convert list of objects to map of maps
我是 Javascript 的新手。
我正在使用 javascript.
将对象列表转换为地图的地图
下面是我写的代码。
var person = {
firstName: "John",
lastName: "Doe",
rank: 0,
rollNo: "0201",
school: "test",
id: 0
};
var person1 = {
firstName: "John1",
lastName: "Doe1",
rank: 0,
rollNo: "0201",
school: "test1",
id: 1
};
var testList = []
var testList1 = []
var slotObject = {}
var slotObjectMap = {};
var finalObject = {};
testList.push(person);
testList.push(person1);
console.log(testList);
for (let i = 0; i < testList.length; i++) {
slotObject["firstName"] = testList[i].firstName;
slotObject["lastName"] = testList[i].lastName;
slotObject["rollNo"] = testList[i].rollNo;
slotObject["rank"] = testList[i].rank;
slotObject["school"] = testList[i].school;
testList1.push(slotObject);
if (finalObject[testList[i]]) {
console.log("yes");
slotObjectMap = {};
} else {
slotObjectMap = finalObject[testList[i].school];
}
slotObjectMap[testList[i].id] = slotObject;
finalObject[testList[i].school] = slotObjectMap;
}
console.log(slotObjectMap);
console.log(finalObject);
// Display some data from the object:
document.getElementById("demo").innerHTML =
person.firstName;
<h2>JavaScript Objects</h2>
<p id="demo"></p>
我的预期输出是:
{ test:{
0:{firstName: "John", lastName:"Doe", rank:0, rollNo:"0201", school:"test"},
},
test1:{
1:{firstName: "John1", lastName:"Doe1", rank:0, rollNo:"0201", school:"test1"}
}
}
我上面的代码没有按预期工作。不确定哪里出了问题。
请帮忙。
我的最终目标是将上面的对象(person, person1) 隐藏到下面的输出中。这可以使用数组减少吗?
[ { additionalInfo : ''
, school : 'test'
, randomValue : ''
, studentInfo:
[ { rank : 0
, rollNo : '0201'
, firstName : 'John'
, lastName : 'Doe'
} ] }
, { additionalInfo : ''
, school : 'test1'
, randomValue : ''
, studentInfo:
[ { rank : 0
, rollNo : '0201'
, firstName : 'John1'
, lastName : 'Doe1'
} ] }
]
不能 100% 确定您的所有带有 slotObject 等的代码都是关于什么的。
但是看看您的预期输出,您似乎想使用 reduce,以 school 作为键,您可以使用它来 reduce into..
例如
var person = {
firstName: "John",
lastName: "Doe",
rank: 0,
rollNo: "0201",
school: "test",
id: 0
};
var person1 = {
firstName: "John1",
lastName: "Doe1",
rank: 0,
rollNo: "0201",
school: "test1",
id: 1
};
const r = [person, person1].reduce(
(a, v) => {
//extract school & id,
const {school, id, ...other} = v;
//lets make sure school exists
a[school] = a[school] || {};
//lets add back school to other, and assign
//and use id as another sub key into school.
a[school][id] = {...other ,school};
return a},
{});
console.log(r);
<h2>JavaScript Objects</h2>
<p id="demo"></p>
您不能使用 Array.map,因为此方法 return 一个数组,而您需要一个对象。
了解 array.reduce and Destructuring assignment
var person = { firstName:"John", lastName:"Doe", rank:0, rollNo:"0201", school:"test", id:0 }
, person1 = { firstName:"John1", lastName:"Doe1", rank:0, rollNo:"0201", school:"test1", id:1 }
;
let testList = [ person, person1 ]
let result = testList.reduce((r,{school, id, ...info})=>
{
r[school] = {}
r[school][id] = {...info, school }
return r
}
,{})
console.log( result )
.as-console-wrapper { max-height: 100% !important; top: 0; }
问题更新
(以及 PO 的评论部分 - 在聊天中)
let testList =
[ { firstName:"John", lastName:"Doe", rank:0, rollNo:"0201", school:"test", id:1 }
, { firstName:"John1", lastName:"Doe1", rank:0, rollNo:"0201", school:"test1", id:2 }
, { firstName:"John2", lastName:"Doe2", rank:0, rollNo:"0202", school:"test1", id:3 }
, { firstName:"John3", lastName:"Doe3", rank:0, rollNo:"0203", school:"test", id:5 }
]
, result =
testList.reduce((res,{ firstName, lastName, rank, rollNo, school })=>
{
let line = res.find(x=>x.school===school)
if (!line)
{
line = { additionalInfo:'', school, randomValue:'', studentInfo:[] }
res.push(line)
}
line.studentInfo.push({ rank, rollNo, firstName, lastName })
return res
}
,[] )
console.log( result )
.as-console-wrapper { max-height: 100% !important; top: 0; }
我是 Javascript 的新手。
我正在使用 javascript.
将对象列表转换为地图的地图
下面是我写的代码。
var person = {
firstName: "John",
lastName: "Doe",
rank: 0,
rollNo: "0201",
school: "test",
id: 0
};
var person1 = {
firstName: "John1",
lastName: "Doe1",
rank: 0,
rollNo: "0201",
school: "test1",
id: 1
};
var testList = []
var testList1 = []
var slotObject = {}
var slotObjectMap = {};
var finalObject = {};
testList.push(person);
testList.push(person1);
console.log(testList);
for (let i = 0; i < testList.length; i++) {
slotObject["firstName"] = testList[i].firstName;
slotObject["lastName"] = testList[i].lastName;
slotObject["rollNo"] = testList[i].rollNo;
slotObject["rank"] = testList[i].rank;
slotObject["school"] = testList[i].school;
testList1.push(slotObject);
if (finalObject[testList[i]]) {
console.log("yes");
slotObjectMap = {};
} else {
slotObjectMap = finalObject[testList[i].school];
}
slotObjectMap[testList[i].id] = slotObject;
finalObject[testList[i].school] = slotObjectMap;
}
console.log(slotObjectMap);
console.log(finalObject);
// Display some data from the object:
document.getElementById("demo").innerHTML =
person.firstName;
<h2>JavaScript Objects</h2>
<p id="demo"></p>
我的预期输出是:
{ test:{
0:{firstName: "John", lastName:"Doe", rank:0, rollNo:"0201", school:"test"},
},
test1:{
1:{firstName: "John1", lastName:"Doe1", rank:0, rollNo:"0201", school:"test1"}
}
}
我上面的代码没有按预期工作。不确定哪里出了问题。
请帮忙。
我的最终目标是将上面的对象(person, person1) 隐藏到下面的输出中。这可以使用数组减少吗?
[ { additionalInfo : ''
, school : 'test'
, randomValue : ''
, studentInfo:
[ { rank : 0
, rollNo : '0201'
, firstName : 'John'
, lastName : 'Doe'
} ] }
, { additionalInfo : ''
, school : 'test1'
, randomValue : ''
, studentInfo:
[ { rank : 0
, rollNo : '0201'
, firstName : 'John1'
, lastName : 'Doe1'
} ] }
]
不能 100% 确定您的所有带有 slotObject 等的代码都是关于什么的。
但是看看您的预期输出,您似乎想使用 reduce,以 school 作为键,您可以使用它来 reduce into..
例如
var person = {
firstName: "John",
lastName: "Doe",
rank: 0,
rollNo: "0201",
school: "test",
id: 0
};
var person1 = {
firstName: "John1",
lastName: "Doe1",
rank: 0,
rollNo: "0201",
school: "test1",
id: 1
};
const r = [person, person1].reduce(
(a, v) => {
//extract school & id,
const {school, id, ...other} = v;
//lets make sure school exists
a[school] = a[school] || {};
//lets add back school to other, and assign
//and use id as another sub key into school.
a[school][id] = {...other ,school};
return a},
{});
console.log(r);
<h2>JavaScript Objects</h2>
<p id="demo"></p>
您不能使用 Array.map,因为此方法 return 一个数组,而您需要一个对象。
了解 array.reduce and Destructuring assignment
var person = { firstName:"John", lastName:"Doe", rank:0, rollNo:"0201", school:"test", id:0 }
, person1 = { firstName:"John1", lastName:"Doe1", rank:0, rollNo:"0201", school:"test1", id:1 }
;
let testList = [ person, person1 ]
let result = testList.reduce((r,{school, id, ...info})=>
{
r[school] = {}
r[school][id] = {...info, school }
return r
}
,{})
console.log( result )
.as-console-wrapper { max-height: 100% !important; top: 0; }
问题更新
(以及 PO 的评论部分 - 在聊天中)
let testList =
[ { firstName:"John", lastName:"Doe", rank:0, rollNo:"0201", school:"test", id:1 }
, { firstName:"John1", lastName:"Doe1", rank:0, rollNo:"0201", school:"test1", id:2 }
, { firstName:"John2", lastName:"Doe2", rank:0, rollNo:"0202", school:"test1", id:3 }
, { firstName:"John3", lastName:"Doe3", rank:0, rollNo:"0203", school:"test", id:5 }
]
, result =
testList.reduce((res,{ firstName, lastName, rank, rollNo, school })=>
{
let line = res.find(x=>x.school===school)
if (!line)
{
line = { additionalInfo:'', school, randomValue:'', studentInfo:[] }
res.push(line)
}
line.studentInfo.push({ rank, rollNo, firstName, lastName })
return res
}
,[] )
console.log( result )
.as-console-wrapper { max-height: 100% !important; top: 0; }