【问题标题】:Pass variable into Object.keys() or Object.values() [duplicate]将变量传递给 Object.keys() 或 Object.values() [重复]
【发布时间】:2021-08-19 17:51:08
【问题描述】:

我在创建一个通过 intp Object.values() 传递的动态“字符串”时遇到问题

import data from "~/static/words.json"
console.log(Object.values(data.vocabulary.lection1)) //This works
let section = "vocabulary"
let lection = "lection1"
let string = `data.${section}.${lection}`
console.log(Object.values(string)) //This doesn't work, It returns ["d", "a", "t", "a", ".", "v", "o", "c", "a", "b", "u", "l", "a", "r", "y", ".", "l", "e", "c", "t", "i", "o", "n", "1"]

【问题讨论】:

  • 您可以使用Object.values(data[section][lection])。您拥有的代码不是 JavaScript 的工作方式。
  • @Pointy 但是有一个问题,我得到了这个错误。元素隐式具有“任何”类型,因为“字符串”类型的表达式不能用于索引类型。
  • @devMontu 这是一个 TypeScript 错误。
  • @VLAZ 那么我该如何解决呢?我不能?
  • @devMontu 使用类型保护或断言,如果需要的话。我既不知道您的数据,也不知道您正在使用的类型,所以我无法具体说明。

标签: javascript json object


【解决方案1】:

您将其全部转换为字符串,然后通过滥用Object.values() 将其分解为数组。这可能就是您要查找的内容:

在附加信息后更新:

const data = { vocabulary: { lection1: { hello: 'helllo' } } };
console.log(Object.values(data.vocabulary.lection1)); //This works
let section = 'vocabulary';
let lection = 'lection1';
let string = `data.${section}.${lection}`;
const otherString = data[section][lection];
// console.log(Object.values(string));
console.log(Object.values(otherString));

【讨论】:

  • 但是有一个问题,我得到了这个错误:元素隐式有一个'any'类型,因为'string'类型的表达式不能用于索引类型。
  • 那你的data 变量是什么样子的?
  • ``` "词汇": { "lection1": { "hello":"hello"}}```
  • 将我的解决方案集成到您的示例中。如果你运行 sn-p,它就可以工作。
  • 啊,是的,就是这样。谢谢
【解决方案2】:

问题是您将字符串文字传递给Object.values()

如您所见on the documentationObject.values() 接受一个可迭代对象(例如,字符串是一个可迭代的字符列表)并将其拆分为一个数组。

问题是你试图访问一个对象的值,但你并没有引用访问的字典,只是一个字符串。事实上,在这种情况下,Object.values() 是不需要的。

您可以通过两种方式访问​​对象的值。

data.section.lection1 是一种选择,其中section 和lection 是对象中的键名。这不是动态的,但知道它很有用。另一种方式,更可能是您正在寻找的,是data[selection][lection],其中 selection 和 lection 是 variables 代表对象中有效键的字符串(或键的相应类型) .

这是我为它制作的小提琴:https://jsfiddle.net/isaackogan/p1dxknwg/1/

【讨论】:

    【解决方案3】:

    Object.values() 将对象的值作为二维数组返回

    let sampleObject = { a: 'ab', b: 'ba'}
    console.log(Object.values(sampleObject)) // ['ab', 'ba']
    

    现在,String 的行为也类似于 JS 中的对象。因此,当您在 Object.values 中传递字符串时,它会返回组成字符串的字符数组。

    试一试文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-11
      • 2016-02-23
      • 2013-01-28
      • 2012-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多