Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从JSON中的数据数组访问特定对象?_Javascript_Jquery_Json - Fatal编程技术网

Javascript 如何从JSON中的数据数组访问特定对象?

Javascript 如何从JSON中的数据数组访问特定对象?,javascript,jquery,json,Javascript,Jquery,Json,我有一个类似于上面的json数据,我可以通过数据[I].subject获取subject 例如,我可以通过数据[I].subject(I=4)获得“Title3” 然后我可以通过数据[I-1]得到“Title3”上一项。subject和我将得到“Title2.1” 我的问题是,有什么方法可以让我在相同的“lv”(级别)中获得上一个项目? 在英语中类似于“data[previitem in same lv] 谢谢,抱歉你的英语不好。我昨天看到了你之前的问题……我想如果你需要多次(按级别搜索spec

我有一个类似于上面的json数据,我可以通过数据[I].subject获取subject

例如,我可以通过数据[I].subject(I=4)获得“Title3” 然后我可以通过数据[I-1]得到“Title3”上一项。subject和我将得到“Title2.1”

我的问题是,有什么方法可以让我在相同的“lv”(级别)中获得上一个项目? 在英语中类似于“data[previitem in same lv]


谢谢,抱歉你的英语不好。

我昨天看到了你之前的问题……我想如果你需要多次(按
级别搜索spec元素),你应该对数组排序。或者你只需要做几次,你只需要一个循环来找到你想要的前一个元素

一个简单的方法如下:

data: [
  {
    cid: "211211",
    parentCid: "212121",
    level: 3,
    number: "2.1.1",
    subject: "Title 2.1.1"
  },
  {
    cid: "111111",
    parentCid: "",
    lv: 1,
    number: "1",
    subject: "Title1"
  },
  {
    cid: "222222",
    parentCid: "",
    lv: 1,
    number: "2",
    subject: "Title2"
  },
  {
    cid: "212121",
    parentCid: "222222",
    lv: 2,
    number: "2.1",
    subject: "Title2.1"
  },
  {
    cid: "333333",
    parentCid: "",
    lv: 1,
    number: "3",
    subject: "Title3"
  }
]
请参阅完整的演示:

var数据=[
{
cid:“211211”,
parentCid:“212121”,
吕:3,,
编号:“2.1.1”,
主题:“标题2.1.1”
},
{
cid:“111111”,
parentCid:“,
吕:1,,
编号:“1”,
主题:“标题1”
},
{
cid:“2222222”,
parentCid:“,
吕:1,,
编号:“2”,
主题:“标题2”
},
{
cid:“212121”,
parentCid:“2222222”,
吕:2,,
编号:“2.1”,
主题:“标题2.1”
},
{
cid:“333333”,
parentCid:“,
吕:1,,
编号:“3”,
主题:“标题3”
}
];
函数findPrev(i){
var级别=数据[i--].lv;
而(i>=0){
if(data[i].lv==level)返回i;
我--;
}
return-1;//找不到
}

console.log(data[findPrev(4)];//data[4]去查找数据[2]
我想你想要这样的东西:

function findPrev(i) {
    var level = data[i--].lv;
    while (i >= 0) {
        if (data[i].lv === level) return i;
        i--;
    }

    return -1;  // not found
}

我假设您已经有了“当前项”的索引
I
,或者知道如何获取它。在这种情况下,一个简单的方法是在循环中从当前项向后移动,比较
lv

function prevItemSameLv(data, i) {
    for (var idx=i-1; idx>=0; idx--) {
        if (data[idx].lv == data[i].lv) return data[idx];
    }
}
这将从
i
向后遍历数组,找到具有匹配
lv
属性的第一个元素,如果不存在,则返回-1


这也假定“先前”的含义与JSON数组中所呈现的顺序相同(即索引具有语义意义)。如果您打算通过其他方式排序,例如“代码>编号< /代码>,则可以考虑首先对整个内容进行排序。

< p>可以使用像y-Loash那样的库,它具有名为“FodeIndex”的函数。,请在此处阅读更多内容:但它将只返回一个值

此外,您还可以检查这个关于过滤数据的问题:

,您的问题的答案很简单。要查找具有相同级别的上一个元素,只需减小“i”并检查级别是否相同。如果没有,则再次递减


具体是什么。

编写一个代码,按照该级别对数组中的对象进行排序。然后遍历并处理.ya..这就是我的想法。我只是想确定是否有其他方法可以做到这一点。另一种解决方案是,如果您可以控制数据的生成方式,并且级别数量有限,则为每个级别生成一个数组。然后,查找上一项就变得微不足道了。
var previousItemIndex = i - 1;

while(previousItemIndex >= 0 && data[i].lv !== data[previousItemIndex].lv)
    previousItemIndex--;