繁体   English   中英

如何从 javascript 对象中删除父键?

[英]How can I remove the parent keys from a javascript Object?

我目前有这个对象:

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)

显然,这不是我所追求的,因为它给我留下了对象{0:对象,1:对象}。

我想在这里做什么可能还是我看错了?

(Codewise) 最简单的解决方案可能是使用Object.keys()Array.map()

flatSchoolsObject = Object.keys( schoolsObject[0] )
                          .map( ( key ) => schoolsObject[0][ key ] );

如果schoolsObject数组有更多条目,则必须稍微调整代码:

let step1 = schoolsObject.map( ( el ) => {
              return Object.keys( schoolsObject[0] )
                           .map( ( key ) => schoolsObject[0][ key ] );
            })
flatSchoolsObject = [].concat.apply( [], step1 );

(仅出于可读性原因引入了step1变量。)

给定对象:

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"
}]

您可以对Object.keys的结果使用Array#map来做到这一点。 由于数组中只有一个对象,我们这样做:

schoolsObject = Object.keys(schoolsObject[0]).map(function(key) {
  return schoolsObject[0][key];
});

现场示例:

 var schoolsObject = [ { "college_1": { "id": "college_1", "location": "Victoria", "name": "College One" }, "college_2": { "id": "college_2", "location": "Tasmania", "name": "College Two" } }]; schoolsObject = Object.keys(schoolsObject[0]).map(function(key) { return schoolsObject[0][key]; }); console.log(schoolsObject);

使用 ES2015+ 你可以使用箭头函数来缩短它:

schoolsObject = Object.keys(schoolsObject[0]).map(key => schoolsObject[0][key]);

您需要连接从 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]
  })
}, [])

 // Code goes here var schoolsObject = [{ "college_1": { "id":"college_1", "location":"Victoria", "name":"College One" }, "college_2": { "id":"college_2", "location":"Tasmania", "name":"College Two" } }]; var result = Object.keys(schoolsObject[0]).map(function(key){ return schoolsObject[0][key]; }) console.log(result);

其他版本

 var schoolsObject = [{ "college_1": { "id": "college_1", "location": "Victoria", "name": "College One" }, "college_2": { "id": "college_2", "location": "Tasmania", "name": "College Two" } }]; var result = []; for (var property in schoolsObject[0]) { if (schoolsObject[0].hasOwnProperty(property)) { result.push(schoolsObject[0][property]); } } console.log(result);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM