【问题标题】:how to access object data in node.js? [duplicate]如何访问 node.js 中的对象数据? [复制]
【发布时间】:2022-01-19 20:47:36
【问题描述】:

这是我的对象。

players:{
   "ssa": {
     "roomCode": "SJRJzaGA8",
     "imagesAlloted": [],
     "team": "",
     "sessionId": "0gSfuhvVF"
   },
   "ss": {
     "roomCode": "SJRJzaGA8",
     "imagesAlloted": [],
     "team": "",
     "sessionId": "8G7QtTEXV"
   }
}

我想用键和值迭代整个对象

我正在使用

for(let [key, value] in players){
   console.log(key + "has" + JSON.stringify(value));
}

这给出的输出类似于:

[0] "$" is "c"
[0] "$" is "i"
[0] "t" is "o"
[0] "c" is "l"
[0] "t" is "r"

我使用的是节点版本 16.13

【问题讨论】:

标签: javascript node.js


【解决方案1】:

使用Object.entries() 获取键和值。

Object.entries(players).forEach(([key, value]) => console.log(key + "has" + JSON.stringify(value)))

【讨论】:

    【解决方案2】:

    您可以使用Object.entries()flatMap()

    const players = {
      "ssa": {
        "roomCode": "SJRJzaGA8",
        "imagesAlloted": [],
        "team": "",
        "sessionId": "0gSfuhvVF"
      },
      "ss": {
        "roomCode": "SJRJzaGA8",
        "imagesAlloted": [],
        "team": "",
        "sessionId": "8G7QtTEXV"
      }
    }
    
    const result = Object.values(players).flatMap((v) => {
        return Object.entries(v).flat();
    });
    
    console.log(result);

    【讨论】:

      【解决方案3】:

      我会让我的 for 循环像这样

      for (let player in players) {
        console.log("Key: ", player, " has ", players[player]);
      }
      

      player 是关键

      players[player] 会给你那个玩家的价值。

      你的方式

      for (const [key, value] of Object.entries(object1)) {
        console.log("Key: ", key, " has ", value);
      }
      

      也应该给你同样的结果。这是 MDN 参考 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries

      【讨论】:

      • 这些在 js 控制台中工作,但不在节​​点服务器端
      • 可能是因为它是一个深层对象,所以在控制台上它可能只是显示[object object] 或其他东西,但它确实存在(如果有意义的话)
      • 我做了 Json.stringify 来解决 [object][object]。该对象也具有环境键。我希望指定一个
      【解决方案4】:

      此线程中提出的其他解决方案有效,但我觉得 OP 在他的 for/in 循环的语法上犯了一个基本错误,对他/她来说理解初始代码失败的原因很重要。这是因为[key, value] 周围不应该有括号。用 for/in 循环做 OP 想要的,语法是:

      for(let p in players){
         console.log(p, players[p]);
      }
      

      输出:

      ssa {roomCode: 'SJRJzaGA8', imagesAlloted: Array(0), team: '', sessionId: '0gSfuhvVF'}
      ss {roomCode: 'SJRJzaGA8', imagesAlloted: Array(0), team: '', sessionId: '8G7QtTEXV'}
      

      你得到单个字母的原因是你不正确的[key, value]片段是destructuring每个键。当您尝试将字符串解构为数组时,该字符串将分解为单个字符。因此,给定语句const [foo, bar, baz] = "ABC" 会将 A 分配给 foo,B 分配给 bar,依此类推。您的原始代码遍历对象,将每个键作为字符串提取,将该字符串的第一个和第二个字母分配给变量,然后记录变量。

      【讨论】:

      • 这些在 js 控制台中工作,但不在节​​点服务器端
      • 我不知道您所说的“不工作”是什么意思,但这是此代码的屏幕截图
      猜你喜欢
      • 2018-06-28
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 2014-07-16
      • 1970-01-01
      • 2021-07-17
      • 1970-01-01
      • 2016-03-04
      相关资源
      最近更新 更多