【问题标题】:Accessing array from JSON in if statement Node.JS [closed]在if语句Node.JS中从JSON访问数组[关闭]
【发布时间】:2020-02-28 07:39:58
【问题描述】:

我的 JSON 文件看起来像这样

module.exports={
    roles: {
        valid:["Area Director","Managing Director","Default"]}}

我正在尝试在我的 Node.js 中执行此操作

connection.connect(function(err) {
  connection.query(`SELECT display_title FROM user WHERE username = "${rolecheckemail}" `, function (err, result, fields) {
  try{if(result[0].display_title.includes(roles.roles.valid)
    )
{
  res.send("Valid")}
  else{
    res.send("Not Valid")}
  }
  catch(err){
    res.send("Not Valid")
  }});
});

我想检查我的display_title 是否包含来自 JSON 的任何有效角色。 我的 Node.js 语法似乎是错误的。

【问题讨论】:

  • display_title 是一个数组吗?还是要您检查 display_title 是否是 roles.valid 值之一?
  • display_title 是一个字符串

标签: arrays node.js json express if-statement


【解决方案1】:

你有几个错误:

要声明一个数组,您需要使用 coma 并更改包含的检查:

let valid = ["Area Director"||"Managing Director"|| "Default"]
console.log(valid) 
// you have created an array of 1 element cause of the OR condition: STRING_1 OR STRING_2 will return STRING_2

valid = ["Area Director", "Managing Director", "Default"]
console.log(valid)

const display_title = 'Area Director'
console.log(valid.includes(display_title))

【讨论】:

  • dispal_title 已经是一个定义的字符串。我在这里要做的是检查它是否包含来自 JSON 的任何条目作为子字符串或完全匹配。
  • 请用一些文本示例更新您的问题,因为我不清楚您要归档什么
  • 我已经更新了sn-p,你现在可以查看
  • 我不是指代码,而是文本示例。你的代码“翻译”说:如果(字符串display_title包含一个字符串数组){},这将永远是false我的代码告诉你如何检查:如果valid数组包含字符串display_title返回真
  • 您先生是冠军。有效!我重新阅读了您的代码!
【解决方案2】:

首先我猜你的 JSON 结构是不允许的,至少对我不起作用。

您也可以使用 .ts 文件代替 JSON,在其中您可以使用“export”创建“const”变量,并像这样导入应用程序周围的所有内容。

export const data = {
    roles: {
        valid: [
            'Area Director',
            'Managing Director',
            'Default'
        ]
    }
};

一旦你写好了变量,你只需要将 ts 导入到你需要的地方,就像这样。

import { data } from './MyDocument.ts';

在我使用 Angular 9 的情况下,我需要执行以下操作。

export class MainComponent implements OnInit {

  public data: any = data;

  constructor() { }

  ngOnInit(): void {
    if (this.data.roles.valid[2] === 'Default') {
      console.log('Hello');
    }
  }
}

Here is our 'Hello'

我只是想帮助你,如果这对你不起作用,或者你需要更多帮助,请提供代码 sn-p,以便我更准确地找出问题所在。

【讨论】:

  • 我已根据您的建议修复了 JSON。但是,在if(display_title.includes(roles.roles.valid)) 中,我想检查我的字符串“display_title”以使 JSON 数组中的任何角色都有效并提供 true
  • 然后使用 'in' 例如public validData = ['区域总监', '总经理', '默认'];此数组包含您的有效数据,然后您需要检查 json 与有效数据,如下所示: if (display_title in roles.roles.valid) {}
  • 这应该也可以,但是如果您查看上述解决方案,它也会考虑通配符搜索,例如“区域主管 - 美国”或“IN 区域主管”。而且,这正是我正在寻找的用例。
猜你喜欢
  • 2018-12-26
  • 1970-01-01
  • 2012-11-13
  • 1970-01-01
  • 1970-01-01
  • 2017-09-05
  • 1970-01-01
  • 2021-08-11
  • 2022-06-10
相关资源
最近更新 更多