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