【问题标题】:jquery - Access array by leveljquery - 按级别访问数组
【发布时间】:2015-07-29 02:46:16
【问题描述】:

假设我在下面有这个数组:

['uploads']
    {
        ['file_1']
            {
                //maybe some attributes here
            }
        ['file_2']
            {
                //maybe some attributes here
            }
        ['folder_1']
            {
                ['file_1']
                    {
                        //maybe some attributes here
                    }
                ['file_2']
                    {
                        //maybe some attributes here
                    }
                ['folder_1']
                    {
                        ['file_1']
                            {
                                //maybe some attributes here
                            }
                        ['file_2']
                            {
                                //maybe some attributes here
                            }

                    }
            }
        ['folder_2']
            {
                ['file_1']
                    {
                        //maybe some attributes here
                    }
                ['file_2']
                    {
                        //maybe some attributes here
                    }
            }
    }

假设这个数组或对象被称为数据。我认为 ['uploads'] 是第一级;到目前为止,一级只有一个条目。 ['uploads'] 的第 2 级有 4 个条目、2 个文件和 2 个文件夹。如果一个条目是一个文件夹,它可以有更多的级别,你会得到图片。

然后所有这些都在 jquery 中创建为页面上的可点击 div。当然只有第一级。

因此,如果用户单击 folder_1,我想用 ['uploads'] 的第二级的 folder_1 填充另一个名为 'current_directory' 的数组,如下所示:current_directory = data['uploads']['folder_1'];。然后这个数组被创建为可点击的 div 并且用户可以再次点击某些东西,如果它是一个文件夹,它将使用新文件夹重新填充 current_directory,但这次如下:current_directory = current_directory['folder_1']; 或用户点击的任何文件夹。

现在问题来了,当我想回到上一个目录时。我如何跟踪我所在的级别或诸如签入数据(这是整个文件夹结构)数组 current_directory 所属的键(文件夹)。

只是想你应该知道在同一级别中没有两个键,无论是文件还是文件夹,都可以具有相同的名称。然后文件和文件夹显然不会被称为 file_1 和 folder_1 而是用户生成的名称。

哦,然后,我所说的属性是指更多只有文件才能拥有的键,例如 ['type'] 和 ['size']。

【问题讨论】:

  • 它不是一个数组,也绝对不是一段 JavaScript...
  • 这不是我在 jquery 中输入的用于创建数组的代码,只是一个显示其外观的结构。可能不应该将其作为代码放入,我明白这一点。整个数组是从 php 脚本作为 JSON 对象传递的,因此可以将其视为一个。

标签: jquery arrays stack


【解决方案1】:

您尝试做的事情通常是使用stack 数据结构:

例如看简单的实现:

// create a stack named history
var history = []

// ...

// when a folder is expanded - add it to the stack
history.push(currentfolder)

// when going back - remove the last item
history.pop()
var current = history[history.length - 1]

因此我们的想法是跟踪所有操作并简单地“撤消”最后一个操作;当前文件夹始终可以作为数组的最后一项访问。

要了解更多信息,请参阅文章How do you implement a Stack and a Queue in JavaScript?

【讨论】:

  • 像魅力一样工作。我花了一段时间才弄清楚为什么我的实现不起作用,然后我更改了数组名称然后它起作用了,也许“历史”是为我不知道的东西保留的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-08
  • 2014-11-10
  • 1970-01-01
  • 1970-01-01
  • 2019-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多