【问题标题】:How to access and sort keys in nested objects in Javascript?如何在 Javascript 中访问和排序嵌套对象中的键?
【发布时间】:2021-04-01 22:34:13
【问题描述】:

我有一个这样的嵌套对象

info ={

"id-1": 
{
name: Jane, 
age: 35, 
experience: "7+",
position: manager, 
 
},

"id-2": 
{
age: 38, 
name: John, 
position: manager, 
experience: "9+", 
},

"id-3": 
{
age: 42, 
experience: "12+", 
position: manager, 
name: Max, 
}

我有一个字符串

let myString ="name, age,position, experience"

我需要访问对象中的键(姓名、年龄、职位、经验)并根据此字符串对它们进行排序,因此对象中的键的顺序与 myString 中的顺序相同,如下所示:

"id-1": 
{
name: Jane, 
age: 35, 
position: manager, 
experience: "7+",
},

如何访问嵌套对象中的键并按顺序对其进行排序?当我尝试使用 Object.keys(info) 它返回 id-1, id-2, id-3 而不是姓名、年龄、职位、经验。请帮忙,我似乎想不出办法。

【问题讨论】:

  • 这是一个 XY 问题,因为还不能保证对象中键的顺序。您实际上想在这里解决什么更高级别的问题?
  • 请您修复对象示例中的语法错误? (例如,id-37+ 无效)
  • 尝试使用 info.entries() 或 info.values()。
  • @ucup,当我使用 info.values 时,它会返回对象 itel,例如 { name: Jane, age: 35, position: manager, experience: 7+, },而不是键(姓名、年龄、位置)

标签: javascript sorting object nested


【解决方案1】:

首先,您的键的大部分值都是无效的。例如,7+ 不是 stringnumberboolean,而像 managerJohn 这样的词如果周围没有引号,则将被视为变量。所以你的数据需要修复。

接下来,不要将对象包装在仅具有顺序键名的对象中(破折号是键名中的非法语法,除非顺便引用了键名),只需将所有对象放在一个数组中。

然后,只需遍历数组中的对象,并按照您想要的顺序手动提取您想要的各个键值。无需考虑重新排序它们的存储顺序。

let info = [ 
  {name: "Jane", age: "35", experience: "7+", position: "manager" },
  {age: "38", name: "John", position: "manager", experience: "9+"},
  {age: "42", experience: "12+", position: "manager", name: "Max"}
];

let keyNames = ["name", "age", "position", "experience"];

// Loop over the objects in the array
info.forEach(function(obj){
  let output = ""; // Will hold the output for one object at a time
  
  // Loop over the key names in the array so we go in the desired order
  keyNames.forEach(function(key){
    // Build up the string with they key name and the key value
    output += key + ": " + obj[key] + " ";
  });
  
  console.log(output); // Write out the string for the object
});

【讨论】:

  • 这会返回对象的值(Jane,35,经理),我需要访问键(姓名,年龄,职位)。
  • @alia 您不想要这些值,还是想要键名和值?
  • @alia 如果你知道键名并且你知道你想要它们的顺序,为什么你需要程序返回它们?
  • key:对象中的值以不同的顺序存储,所以在 id-1 中它的名字是:Jane,年龄:35,在 id-2 中它是 38 岁,名字:John,我需要显示值来自对象的顺序与 myString 相同,因此像这样的“姓名、年龄、职位、经验”,因此所有对象(id-1、id-2、id-3)都将具有相同顺序的键:值(首先是名称:value, 然后是 age:value) 等等。
  • @alia 我的原始代码是这样做的,但我已经对其进行了重新设计,以便向您显示名称和值。
猜你喜欢
  • 2022-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-10
  • 1970-01-01
  • 2021-05-27
相关资源
最近更新 更多