Javascript:使用 'defined' 谓词将变量名称作为字符串获取

标签 javascript

我的用例如下:

FlexboxStyle: {
  display: 'flex',
  justifyContent: // need a string value like 'flexEnd'
}


我想获取变量名称的字符串值,但有一些限制,不太冗长可能。

我已经知道您可以使用 Object.keys() 方法返回的第一个值来获取现有变量的字符串:

var name = Object.keys({ myVariable })[0]

console.log(name) // 'myVariable'

话虽如此,如果您知道更优雅的方式来完成这部分,我会加入!


以下代码无法正常工作,但可以很好地表达我的需求:

FlexboxStyle: {
  ...
  justifyContent: Object.keys({ flexEnd } || { distanceBetween } || ...)[0]
}

我面临的问题是 { undefined_variable } 会触发错误。并且只定义需要的那个。

对我来说幸运的是,所有这些变量都集中在一个对象 props 中,允许我使用辅助函数。 这是一个解决方法,但我真的在寻找一个漂亮的单行代码解决方案或比以下更好的解决方案:

const helpingFunction = (props, researchedKeys, defaultValue) => {
  researchedKeys.forEach(function (key) {
    if (props.hasOwnProperty(key)) {
      return key
    }
  })
  return defaultValue
}

FlexboxStyle: {
  ...
  justifyContent: helpingFunction(definedVariables, ['flexEnd', 'distanceBetween', ...], 'flexStart')
}

TL:DR;

1。有没有更好/更漂亮的方法来获得以下结果? :

var name = Object.keys({ myVariable })[0]

console.log(name) // 'myVariable'

2。有效的类似代码是否可以避免使用帮助功能? :

justifyContent: Object.keys({ flexEnd } || { distanceBetween } || ...)[0]

最佳答案

您不能在代码中使用“变量名”。无论如何,名称是无意义的和静态的。只需使用一个字符串。

但是如果你想检查一个对象中存在几个属性中的哪一个,你可以这样做

['flexEnd', 'distanceBetween', ...].find(name => name in this.props) || 'flexStart'
//                                                       ^^^^^^^^^^
//                                                       or whatever the object is

关于Javascript:使用 'defined' 谓词将变量名称作为字符串获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54495024/

相关文章:

javascript - 一个 ui-sref 链接有效,其余无效

javascript - 如何获取/获取函数的所有参数?

Javascript:Promise.all 似乎没有解决

javascript - 为什么我看不到 javascript WebSocket 上的协议(protocol)数组?

javascript - 对象不支持属性或方法 'replace'

javascript - 为 innerHTML 设置大值时提高性能的方法

javascript - 使用 jQuery 延迟对象连续处理 jQuery 集合/数组

javascript - 用于处理更改的 React Props 而不是函数

javascript - 如何在初始加载后将脚本加载到 XUL 应用程序中

javascript - 如何设置names.x