【问题标题】:Why is my nested For loop only returning the first value of the second array when using Vue?为什么我的嵌套 For 循环在使用 Vue 时只返回第二个数组的第一个值?
【发布时间】:2019-11-29 23:02:24
【问题描述】:

我正在使用嵌套的 For 循环来访问 json 中的数据,然后返回一个变量以在前端使用 Vue 进行访问。我不知道为什么,但我只返回嵌套数组的第一个元素的值?希望有人可以帮助解决这个问题。这似乎没有意义。

***总是只有一份工作,这就是为什么我只循环通过工作[0]。

我试过forEach,For of,For,我试过map(不知道如何正确实现)。

所以,这行得通,我可以使用 Vue 返回密钥。请注意,这是一个示例,正在正确访问 json 并且需要将“数据”传递给函数。

function getData(Data) {
    var jobs = Jobs;
    var i;
    for (i = 0; i < jobs.length; i++) {
        return items;
    }
}

try {
    Data.values = getData(Data);
}
catch (e) {
    logError(e);
}

这是 Vue:

<div v-for="value in values">{{ value.Key }}</div>

这不起作用,我不知道为什么?

function getData(Data) {
    var jobs = Jobs;
    var i;
    for (i = 0; i < jobs.length; i++) {
        var items = jobs[0].Items;
        for (i = 0; i < items.length; i++) {
            return items[i].Values;
        }
    }
}

try {
    Data.values = getData(Data);
}
catch (e) {
    logError(e);
}

这是 Vue:

<div v-for="value in values">{{ value.Key }}</div>

如您所见,我刚刚在数组中进一步深入一层。但是,我在前端返回的只是第一项的密钥。例如,我可以使用 return items[2].Values 指定我想要访问的项目,所以我知道我可以访问它们,但我无法获得所有的值。 json 格式正确,我已经使用了这样的 For 循环一百万次,没有 Vue(我对 Vue 比较新)来访问数据。请在给我一个方法、组件或 Vue 特定的东西之前,了解我必须在一个单独的 js 文件中使用这样的函数来返回我将在前端访问的值。这是一个奇怪的设置,但它就是这样。我总体上有点迷茫,但如果我能解决这个问题,那将会有很长的路要走,因为现在我将使用第一个示例,然后做这样的事情(再次只是一个示例):

<template v-for="item in items">
<div v-for="value in values">{{ thing.Key }}</div>
</template>

这对于简单的东西来说很好,但我越深入 json 就会遇到一些问题。我正在访问的一些值是 5 级和 6 级深,并且有 if 语句,我需要对一些值进行数学运算以 terun 字符串和计算其他项目,并且有些项目是对象,而其他项目在同一级别的 json 是数组。这是一团糟,能够在 for 语句中对其进行整理将非常有帮助。

非常感谢所有帮助。

【问题讨论】:

  • 您能否提供您所指的嵌套 JSON 的几层的 sn-p?
  • 我不确定到底发生了什么,但getData 函数非常可疑。它设置jobs,然后进入一个循环,在该循环中它立即返回items,不管是什么。该循环等效于if (jobs.length &gt; 0) return items,因为即使循环执行一次,它也会返回(无需再次执行循环)。如果jobs.length === 0 那么它会从函数底部掉下来并返回undefined

标签: javascript json vue.js


【解决方案1】:

您在两个循环中声明 i。如果您只循环遍历 Jobs 的单个数组项,则无需遍历 Jobs 并直接跳转到其项。

您还将返回一个值,因此循环不会通过第一次迭代。

function getBarCodes(Jobs) {
    var arr = [];
    var items = Jobs[0].Items;
    for (var i = 0; i < items.length; i++) {
        arr.push(items[i].Values)
    }
    return arr;
}

相反,您可以遍历项目,通过将这些值推送到集合数组来收集每个项目的值,然后返回该数组。

【讨论】:

  • 好的,这是有道理的,谢谢。如果我需要在 json 中更深一层或更深怎么办?假设我需要去工作 -> 项目 -> 价值 -> 随便什么?我之前使用过嵌套的 forEach 和 For of 循环来执行此操作,但这在这里不起作用,所以我认为留在你的轨道上可能会起作用,我只是不确定下一步。
  • 另外,我对值遵循了这个逻辑,我可以控制台记录数组,这是我以前可以做的。尽管如此,当我使用 v-for="Value in Values" 和 {{ Value.Key }} 时,前端 Vue 上没有任何显示,我不知道为什么......
  • 我应该澄清一下,我能够使用 forEach 和 For Of 循环来控制台记录数组。我试图使用的 For 循环给了我未定义的结果。您的方法确实有效,但我仍然无法使用 Vue 显示输出。
  • 你需要用一些代码来演示你是如何在 Vue 中做到这一点的,因为有很多方法可以实现这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-03
  • 1970-01-01
  • 2013-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多