首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有什么对象属性来提取javascript中的嵌套键?

有没有什么对象属性来提取javascript中的嵌套键?
EN

Stack Overflow用户
提问于 2019-09-06 13:40:09
回答 4查看 54关注 0票数 0

我试图从这个对象的对象中仅提取团队名称,但无法做到这一点

我已经尝试过Object.keys(data),但它只显示比赛的年份,我也尝试过Object.values(data),但它显示的输出中既有球队名称,也有与之相关的值。

代码语言:javascript
复制
{ '2008': 
   { 'Chennai Super Kings': 9,
     'Delhi Daredevils': 7,
     'Royal Challengers Bangalore': 4,
     'Kolkata Knight Riders': 5,
     'Rajasthan Royals': 13,
     'Kings XI Punjab': 10,
     'Deccan Chargers': 2,
     'Mumbai Indians': 7 },
  '2009': 
   { 'Royal Challengers Bangalore': 9,
     'Delhi Daredevils': 10,
     'Deccan Chargers': 9,
     'Chennai Super Kings': 8,
     'Kolkata Knight Riders': 3,
     'Rajasthan Royals': 6,
     'Kings XI Punjab': 7,
     'Mumbai Indians': 4 },
  '2010': 
   { 'Mumbai Indians': 11,
     'Delhi Daredevils': 7,
     'Kolkata Knight Riders': 6,
     'Deccan Chargers': 8,
     'Royal Challengers Bangalore': 8,
     'Chennai Super Kings': 9,
     'Rajasthan Royals': 6,
     'Kings XI Punjab': 4 } }
EN

回答 4

Stack Overflow用户

发布于 2019-09-06 13:49:50

如果你使用的是普通的JS (没有句点、下划线等),你可以得到这样的团队列表

代码语言:javascript
复制
var obj = {/* your object here */};

// for browsers that have flat() support
var onlyTeams = Object.values(obj).map(Object.keys).flat()

// for browsers without flat() support
var onlyTeams = Object.values(obj).map(Object.keys).reduce((acc, val) => acc.concat(val), []);

如果你想对它们进行重复数据删除,你可以这样做

代码语言:javascript
复制
var dedupedTeams = Array.from(new Set(onlyTeams))
票数 3
EN

Stack Overflow用户

发布于 2019-09-06 13:42:52

由于团队名称位于嵌套对象中,因此应在map()中使用Object.keys()

代码语言:javascript
复制
var obj = { '2008': 
   { 'Chennai Super Kings': 9,
     'Delhi Daredevils': 7,
     'Royal Challengers Bangalore': 4,
     'Kolkata Knight Riders': 5,
     'Rajasthan Royals': 13,
     'Kings XI Punjab': 10,
     'Deccan Chargers': 2,
     'Mumbai Indians': 7 },
  '2009': 
   { 'Royal Challengers Bangalore': 9,
     'Delhi Daredevils': 10,
     'Deccan Chargers': 9,
     'Chennai Super Kings': 8,
     'Kolkata Knight Riders': 3,
     'Rajasthan Royals': 6,
     'Kings XI Punjab': 7,
     'Mumbai Indians': 4 },
  '2010': 
   { 'Mumbai Indians': 11,
     'Delhi Daredevils': 7,
     'Kolkata Knight Riders': 6,
     'Deccan Chargers': 8,
     'Royal Challengers Bangalore': 8,
     'Chennai Super Kings': 9,
     'Rajasthan Royals': 6,
     'Kings XI Punjab': 4 } }
     
 var teams = Object.values(obj).map(o => Object.keys(o));
 console.log(teams);

请注意:如果您在单个数组中的团队,您必须使用flat()

代码语言:javascript
复制
var teams = Object.values(obj).map(o => Object.keys(o)).flat();
票数 1
EN

Stack Overflow用户

发布于 2019-09-06 13:44:34

您可以遍历第一级对象,然后遍历它们的键,以获得团队名称:

代码语言:javascript
复制
data = { '2008': { 'Chennai Super Kings': 9, 'Delhi Daredevils': 7, 'Royal Challengers Bangalore': 4, 'Kolkata Knight Riders': 5, 'Rajasthan Royals': 13, 'Kings XI Punjab': 10, 'Deccan Chargers': 2, 'Mumbai Indians': 7 }, '2009': { 'Royal Challengers Bangalore': 9, 'Delhi Daredevils': 10, 'Deccan Chargers': 9, 'Chennai Super Kings': 8, 'Kolkata Knight Riders': 3, 'Rajasthan Royals': 6, 'Kings XI Punjab': 7, 'Mumbai Indians': 4 }, '2010': { 'Mumbai Indians': 11, 'Delhi Daredevils': 7, 'Kolkata Knight Riders': 6, 'Deccan Chargers': 8, 'Royal Challengers Bangalore': 8, 'Chennai Super Kings': 9, 'Rajasthan Royals': 6, 'Kings XI Punjab': 4 } }

Object.values(data).forEach(value => {
    Object.keys(value).forEach(token => console.log(token));
});

如果您想单独获取每一年的团队名称,请执行以下操作:

代码语言:javascript
复制
data = { '2008': { 'Chennai Super Kings': 9, 'Delhi Daredevils': 7, 'Royal Challengers Bangalore': 4, 'Kolkata Knight Riders': 5, 'Rajasthan Royals': 13, 'Kings XI Punjab': 10, 'Deccan Chargers': 2, 'Mumbai Indians': 7 }, '2009': { 'Royal Challengers Bangalore': 9, 'Delhi Daredevils': 10, 'Deccan Chargers': 9, 'Chennai Super Kings': 8, 'Kolkata Knight Riders': 3, 'Rajasthan Royals': 6, 'Kings XI Punjab': 7, 'Mumbai Indians': 4 }, '2010': { 'Mumbai Indians': 11, 'Delhi Daredevils': 7, 'Kolkata Knight Riders': 6, 'Deccan Chargers': 8, 'Royal Challengers Bangalore': 8, 'Chennai Super Kings': 9, 'Rajasthan Royals': 6, 'Kings XI Punjab': 4 } }

Object.values(data).forEach(value => {
    console.log(Object.keys(value));
});

要获得多年来唯一的团队名称,请执行以下操作:

代码语言:javascript
复制
data = { '2008': { 'Chennai Super Kings': 9, 'Delhi Daredevils': 7, 'Royal Challengers Bangalore': 4, 'Kolkata Knight Riders': 5, 'Rajasthan Royals': 13, 'Kings XI Punjab': 10, 'Deccan Chargers': 2, 'Mumbai Indians': 7 }, '2009': { 'Royal Challengers Bangalore': 9, 'Delhi Daredevils': 10, 'Deccan Chargers': 9, 'Chennai Super Kings': 8, 'Kolkata Knight Riders': 3, 'Rajasthan Royals': 6, 'Kings XI Punjab': 7, 'Mumbai Indians': 4 }, '2010': { 'Mumbai Indians': 11, 'Delhi Daredevils': 7, 'Kolkata Knight Riders': 6, 'Deccan Chargers': 8, 'Royal Challengers Bangalore': 8, 'Chennai Super Kings': 9, 'Rajasthan Royals': 6, 'Kings XI Punjab': 4 } }
var teams = new Set();
Object.values(data).forEach(value => Object.keys(value).forEach(team => teams.add(team)));
console.log(teams)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57816288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档