如何从javascript对象中删除父键?
我目前拥有此对象:如何从javascript对象中删除父键?,javascript,javascript-objects,Javascript,Javascript Objects,我目前拥有此对象: schoolsObject = [{ "college_1": { "id":"college_1", "location":"Victoria", "name":"College One" }, "college_2": { "id":"college_2", "location":"Tasmania", "name":"College Two" } }];
schoolsObject = [{
"college_1":
{
"id":"college_1",
"location":"Victoria",
"name":"College One"
},
"college_2":
{
"id":"college_2",
"location":"Tasmania",
"name":"College Two"
}
}];
我想删除顶级关键点,即college_1、college_2,然后像这样“展平”对象,因此我没有“顶级”关键点:
flatSchoolsObject =
[{
"id":"college_1",
"location":"Victoria",
"name":"College One"
},
{
"id":"college_2",
"location":"Tasmania",
"name":"College Two"
}];
这是我的最新尝试,我做了很多不同的尝试,但没有记录它们:
// schoolIDs = Object.keys(schoolsObject);
var schools = {};
for(var i=0; i<Object.keys(schoolsObject).length; i++){
for (var property in schoolsObject) {
if (schoolsObject.hasOwnProperty(property)) {
schools[i] = {
'id': schoolsObject[property]['id'],
'name' : schoolsObject[property]['name'],
'location': schoolsObject[property]['location'],
};
}
}
}
console.log(schools)
//schoolIDs=Object.keys(schoolsObject);
var学校={};
对于(var i=0;i,您可以对Object.keys
的结果使用Array#map
来执行此操作。由于数组中只有一个对象,因此我们的操作如下:
schoolsObject = Object.keys(schoolsObject[0]).map(function(key) {
return schoolsObject[0][key];
});
实例:
var schoolsObject=[
{
“学院1”:{
“id”:“学院1号”,
“地点”:“维多利亚”,
“姓名”:“学院一号”
},
“学院2”:{
“id”:“学院2”,
“地点”:“塔斯马尼亚”,
“姓名”:“第二学院”
}
}];
schoolsObject=Object.keys(schoolsObject[0]).map(函数(键){
返回schoolsObject[0][key];
});
console.log(schoolsObject);
(代码方面)最简单的解决方案可以使用和的组合:
如果schoolsObject
数组有更多的条目,则必须稍微调整代码:
let step1 = schoolsObject.map( ( el ) => {
return Object.keys( schoolsObject[0] )
.map( ( key ) => schoolsObject[0][ key ] );
})
flatSchoolsObject = [].concat.apply( [], step1 );
(出于可读性的原因,引入了step1
变量。)您需要计算从schoolObject中的每个项目提取值的结果
flatSchoolsObject = [].concat.call(
schoolsObject.map(function(item) {
return Object.keys(item).map(function(key) {
return item[key];
})
})
)
或者使用Array.prototype.reduce
flatSchoolsObject = schoolsObject.reduce(function(acc, item) {
return acc.concat(Object.keys(item).map(function(key){
return item[key]
})
}, [])
//代码在这里
变量schoolsObject=[{
“学院1”:
{
“id”:“学院1号”,
“地点”:“维多利亚”,
“姓名”:“学院一号”
},
“学院2”:
{
“id”:“学院2”,
“地点”:“塔斯马尼亚”,
“姓名”:“第二学院”
}
}];
var result=Object.keys(schoolsObject[0]).map(函数(键){
返回schoolsObject[0][key];
})
console.log(结果);
给定对象:
schoolsObject = [{
"college_1":{
"id":"college_1",
"location":"Victoria",
"name":"College One"
},
"college_2":{
"id":"college_2",
"location":"Tasmania",
"name":"College Two"
}
}];
解决方案:
Object.values(schoolsObject[0]);
结果:
[{
"id":"college_1",
"location":"Victoria",
"name":"College One"
},{
"id":"college_2",
"location":"Tasmania",
"name":"College Two"
}]
尝试此操作时,我得到了未捕获的类型错误:schoolsObject.map不是函数。@timdaf:如果你的schoolsObject
真的如问题所示,那么schoolsObject.map
不是函数的唯一原因就是如果你使用的是过时的JavaScript引擎。任何模糊现代的东西(IE9+)在数组上有map
,你问题中的schoolsObject
是一个数组。抱歉,我想我可能误解了我的对象。我遵循了下面的ES6示例,但从schoolsObject中删除了[0]:schoolsObject=object.keys(schoolsObject[0]).map(key=>schoolsObject[0][key])
这正是我所希望的。好的,我也从投票结果中删除了[0],效果很好。我不确定为什么。map不适用于“step1”上面的第二个解决方案,但在使用上面的第一个解决方案或下面的其他ES2015解决方案时效果很好。谢谢大家的帮助。我正在尝试您的解决方案,顺便说一句,谢谢您。我认为第二次返回(下一行)后可能有一个小语法错误,我认为它应该有两个括号。像这样->返回项[key]; })); 当我将JS放入代码时,这是唯一能让它工作的方法。
[{
"id":"college_1",
"location":"Victoria",
"name":"College One"
},{
"id":"college_2",
"location":"Tasmania",
"name":"College Two"
}]