如何仅从 JSON 文件导入不和谐?

Posted

技术标签:

【中文标题】如何仅从 JSON 文件导入不和谐?【英文标题】:How can i import only discord from JSON file? 【发布时间】:2021-10-06 21:02:06 【问题描述】:

我有一个对象数组,这些对象有一个带有字符串的identifiers 数组。这些字符串之一包含 Discord ID。问题是它的位置一直在变化,所以我不能使用第四个标识符。

我只需要 discord 属性。

我尝试了很多东西。我认为它应该只是“不和谐”属性,但我不知道如何解决这个问题并对其进行编码。点击图片查看更多。那里有json文件。都是关于$players[i].identifiers[4]


const updateMessage = function() 
    getVars().then((vars) => 
      getPlayers().then((players) => 
        if (players.length !== LAST_COUNT) log(LOG_LEVELS.INFO,`$players.length graczy`);
        let queue = vars['Queue'];
        let embed = UpdateEmbed()
        .addField('Status serwera','<:tak:847199217063297056> Online',true)
        .addField('W kolejce',queue === 'Enabled' || queue === undefined ? '0' : queue.split(':')[1].trim(),true)
        .addField('Graczy online',`$players.length/$MAX_PLAYERS\n\u200b\n`,true);
        // .addField('\u200b','\u200b\n\u200b\n',true);
        if (players.length > 0) 
          // method D
          const fieldCount = 3;
          const fields = new Array(fieldCount);
         fields.fill('');
          // for (var i=0;i<players.length;i++) 
          //   fields[i%4 >= 2 ? 1 : 0] += `$players[i].name$i % 2 === 0 ? '\u200e' : '\n\u200f'`;
          // 
          
          fields[0] = `**Mieszkańcy na wyspie:**\n`;
          for (var i=0;i<players.length;i++) 
            
            fields[(i+1)%fieldCount] += `$players[i].name [$players[i].id], $players[i].identifiers[4]`; 
          
          for (var i=0;i<fields.length;i++) 
            let field = fields[i];
            if (field.length > 0) embed.addField('\u200b',`\n$fields[i]`, true);
          

        
        
        sendOrUpdate(embed);
        LAST_COUNT = players.length;
      ).catch(offline);
    ).catch(offline);
    TICK_N++;
    if (TICK_N >= TICK_MAX) 
      TICK_N = 0;
    
    for (var i=0;i<loop_callbacks.length;i++) 
      let callback = loop_callbacks.pop(0);
      callback();
    
  ;

【问题讨论】:

【参考方案1】:

如果我理解正确,你想从identifiers 数组中获取元素,但它的位置不固定,它可以在任何地方。

幸运的是,该元素始终以单词“discord”开头,因此您可以使用Array#find()String#startsWith() 来查找您的discord ID。查看下面的 sn-p:

let players = [
  id: 1,
  identifiers: ["license:57349756783645", "xbl:85437852", "live:8953291341", "discord:89325813521519", "fivem:893123"],
  name: "foo",
  ping: 56
, 
  id: 2,
  identifiers: ["xbl:57420987", "live:09123489", "discord:86543932136453", "license:865496782134", "fivem:584723"],
  name: "bar",
  ping: 41
, 
  id: 3,
  identifiers: ["live:99532945", "discord:80521578413532", "license:60795634523", "xbl:1239435", "fivem:943921"],
  name: "bar",
  ping: 41
]

players.forEach(player => 
  let discord = player.identifiers.find(i => i.startsWith('discord')).replace('discord:', '')
  console.log(`
  ID: $player.id
  Name: $player.name
  Discord: $discord
  `)
)
// ...
fields[0] = `**Mieszkańcy na wyspie:**\n`;
for (var i = 0; i < players.length; i++) 
  const discord = players[i].identifiers.find((el) =>
    el.startsWith('discord'),
  ).replace('discord:', '');
  fields[
    (i + 1) % fieldCount
  ] += `$players[i].name [$players[i].id], $discord`;

// ...

【讨论】:

是的,但我只想要数字,没有这个discord:。无论如何,感谢您的评论! 你可以从字符串中删除discord:...我会更新我的答案 你能再帮我一次吗?我更新了我的代码,但现在它不再工作了。 js const discord = players[i].identifiers.find((el) =&gt; el.startsWith('discord'), ).replace('discord:', ''); let playerNames = Array.from(players.values()).map((c) =&gt; `[$c.id] $c.name - &lt;@$discord&gt;`).join('\n'); embed.addField('**Lista graczy:**\n',playerNames,false); 我仍然想获取discord id,但现在它只显示一个成员的discord id 我认为这将是一个新问题,因为这样很难提供帮助。 @SzymonWilczek 请不要在得到不错的答案并将其标记为已接受后对您的问题进行编辑和重大更改。而是提出一个新问题,以您遇到的新问题为特色。谢谢!

以上是关于如何仅从 JSON 文件导入不和谐?的主要内容,如果未能解决你的问题,请参考以下文章