使用字段别名作为 javascript 对象的键

Posted

技术标签:

【中文标题】使用字段别名作为 javascript 对象的键【英文标题】:Use a field alias as the key of a javascript object 【发布时间】:2021-07-29 09:54:20 【问题描述】:

如何?

const countries = 
    'united states of america': 'US',
    'india': 'IN',
    'china': 'CN'

const query = `SELECT country AS ctry, IF(true, '$countries[ctry]', 'p') AS c FROM $table`

这显然会返回ctry is not defined 错误,因为ctry 被认为是一个javascript 变量。当从数据库中检索键时,有没有办法使此查询返回 countries 对象中键的值?

【问题讨论】:

您需要使用CASE 语句编写正确的查询。 @VLAZ 我可以在CASE 语句中访问$countries[ctry] 吗?我不想为所有国家提供案例,因为会有数百个。我打算将它存储在一个 json 文件中。 【参考方案1】:

SQL CASE

这就完成了:

const countries = 
    'united states of america': 'US',
    'india': 'IN',
    'china': 'CN'

const query = `SELECT country AS ctry, CASE WHEN ctry='united states of america' THEN 'US' as c WHEN ctry='india' THEN 'IN' as c WHEN ctry='china' THEN 'CN' as c ELSE 'no country find' as c END FROM $table`

【讨论】:

问题在于所有国家/地区都会有数百个案例。我希望将其存储在 json 文件中并动态访问它。有办法吗?【参考方案2】:

要在 json 对象中执行此操作,您需要使用 for:

const countries = 
    'united states of america': 'US',
    'india': 'IN',
    'china': 'CN'

const query = `SELECT country AS ctry FROM $table`

//Execute here your request

let c = [];

for (let i = 0; i < query.length; i ++) 
  c.push(query[i]['country'])


for (let j = 0; j < c.length; j ++) 
  c[j] = countrie[c[j]]


console.log(c)

我不能用你的信息做更多的事情。

【讨论】:

【参考方案3】:

使用Object.entriescountries 对象转换为数组,然后将.map 转换为输出WHEN '$i[0]' THEN '$i[1]'。这将为您提供每个国家/地区的WHEN 部分。只需将此字符串附加到您的 query (CASE country \n$caseStr\nEND) 中,您就可以为您构建完整的 CASE 语句。

const table = 'test';
const countries = 
  'united states of america': 'US',
  'india': 'IN',
  'china': 'CN'
;
const caseStr = Object.entries(countries).map(i => `WHEN '$i[0]' THEN '$i[1]'`).join('\n');

const query = `SELECT country AS ctry \n, CASE country \n$caseStr\nEND AS c FROM $table`
console.log(query);

为什么将它存储在 JSON 中呢?看起来您无论如何都可以访问数据库,为什么不将国家/地区存储在您可以JOIN 查询的表中?

【讨论】:

以上是关于使用字段别名作为 javascript 对象的键的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Javascript 迭代 DAO 字段集合

通过 JavaScript 中的键访问对象属性

将json对象值变成javascript中的键和值[关闭]

使用对象的字段作为通用字典键

mysql: 两个字段合并,字符时间转时间戳,别名字段作为where条件查询

如何使 JavaScript 中每个元素的 map 函数的键值递增