【问题标题】:How to get a JSON object's key from the object itself in JavaScript/a Vue v-for loop?如何在 JavaScript/Vue v-for 循环中从对象本身获取 JSON 对象的密钥?
【发布时间】:2020-11-25 17:41:22
【问题描述】:

我不是在寻找这个对象包含的键,而是对象本身的键(包含该对象的数组中的键)。

我有这个 JSON:

{
    "Object name (text)": {
        "raw": "Some more text.",
    },
    "Another name": {
        "raw": "Some other text.",
    }
}

并且想为第一个项目获取“对象名称(文本)”

我的 Vue 代码是:

<CustomComponent
    v-for="object in objects"
    :key="getKey(object)"
    :object="object"
/>

我不确定 getKey 方法是否旨在获取唯一标识符以遍历 JSON 数组。目前它的代码是:

getKey(object) {
   return Object.keys(object)[0];
}

现在我想以某种方式将对象的名称传递给 CustomComponent(在第一种情况下为“对象名称(文本)”)。

在找到更合适的方法之前,我打算使用的一个临时解决方法是从对象数组中获取键,如下所示: :objectName="getObjectName(object)"itemNumber: -1 在数据和这个方法中:

getObjectName(object) {
   this.itemNumber = this.itemNumber + 1;
   var objectName = Object.keys(this.objects)[this.itemNumber];
   console.log("Object name: ", objectName);
}

但是,此方法的第一行导致它运行数百次而不是仅运行两次(为什么会这样?;它在该方法的前 2 次执行以及注释掉该行时有效),我认为这是不太可能是简单地检索对象名称/键的正确方法。

将上述代码放入更有意义的 getKey 方法时它也不起作用(在创建单独的方法进行调试之前,我在该方法中拥有代码)。然后可以使用this.$vnode.key 在组件中访问该键,但是它一直未定义。这可能是一个单独的问题,即使它也可以在这里解决这个问题——我可能会为它创建一个新问题。它输入方法“getKey”和“getObjectName”各 6 次,即使它只在页面上呈现两个项目,就像它应该的那样。

-> 如何在 JavaScript 中获取 JSON 对象的键?
(最好在使用 Vue 循环遍历 JSON 数组后从对象本身获取,而不是仅通过检查对象数组间接进行。)

编辑:作为一种解决方法,我现在已经这样做了:

var keys = Object.keys(this.objects);
    keys.forEach(element => {
      this.objectsWithKeys.push({
        object: this.objects[element],
        key: element
      });
    });

<CustomComponent
   v-for="objectWithKeys in objectsWithKeys"
   :key="objectWithKeys.key"
   :object="objectWithKeys.object"
>
</CustomComponent>

this.$vnode.key

【问题讨论】:

  • 您不能依赖调用Object.keys() 时返回密钥的顺序。排序有规则,但它们不受您的控制,它们取决于每个对象的“生活故事”。如果您需要知道密钥,请保留一个顺序完全由您控制的数组。
  • 很高兴知道。如果 .json 文件具有应有的顺序,但 Object.keys() 可以忽略该顺序,如何将其传输到“其顺序完全在 [我的] 控制之下”的数组?我应该尝试将 JSON 对象转换为 js 数组还是您会推荐什么?
  • 问题在于,编写仅在属性名称以特定顺序出现时才有效的代码只是在寻找错误。如果不知道为什么你想要一个属性名,就很难给出建议。对象从哪里来?你的代码怎么不知道属性名?
  • 代码不是只希望对象变量的顺序与 Object.keys() 返回的顺序相同吗?我不会称其为特定顺序,而只是我认为 Object.keys() 将使用的 .json 文件的客观顺序。如果不是这种情况,有没有办法让 Object.keys() 使用这个顺序?如果不是:您是否建议创建某种第二个数组来映射正确的顺序?我想获取道具名称,因为它是我想在组件中显示的文本,并且目前它包含在 .json 文件中。为什么我无法获取 JSON 对象的名称?

标签: javascript json vue.js object key


【解决方案1】:

这个解决了,我用var objectsWithKeys = data[Object.keys(data)];{{ $vnode.key }}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-16
    • 2018-04-06
    • 2021-02-07
    • 2021-07-20
    • 1970-01-01
    • 2018-01-16
    • 1970-01-01
    相关资源
    最近更新 更多