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"
}
]
我有一个像上面这样的json数据,我可以通过data [i] .subject得到主题。
例如,我可以通过data [i] .subject得到“Title3”。(i = 4) 然后我可以通过data [i-1] .subject得到“Title3”上一项,我将获得“Title2.1”。
我的问题是,有什么方法可以获得相同的“lv”(级别)中的上一项? 在英语中是“数据[在同一个lv中的主流]?
感谢并抱歉英语不好。
答案 0 :(得分:2)
我昨天看到你之前的问题...我想如果你需要这么做(多次按level
搜索spec元素),你应该对数组进行排序。或者你只需要做几次,你只需要一个循环来找到你想要的前一个元素。
这样一个简单的方法:
function findPrev(i) {
var level = data[i--].lv;
while (i >= 0) {
if (data[i].lv === level) return i;
i--;
}
return -1; // not found
}
参见完整演示:
var data = [
{
cid: "211211",
parentCid: "212121",
lv: 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"
}
];
function findPrev(i) {
var level = data[i--].lv;
while (i >= 0) {
if (data[i].lv === level) return i;
i--;
}
return -1; // not found
}
console.log(data[findPrev(4)]); // data[4] go find data[2]
答案 1 :(得分:1)
我假设您已经拥有“当前项目”的索引i
,或者知道如何获得它。在这种情况下,一个天真的方法是从循环中的当前项向后移动,比较lv
:
var previousItemIndex = i - 1;
while(previousItemIndex >= 0 && data[i].lv !== data[previousItemIndex].lv)
previousItemIndex--;
这将从i
向后遍历数组,找到具有匹配lv
属性的第一个元素,如果不存在则返回-1。
这也假定“previous”意味着与JSON数组中呈现的顺序相同(即索引具有语义含义)。如果您打算按其他内容订购,例如number
,您可以考虑先对整个事项进行排序。
答案 2 :(得分:1)
LateBloomer,您问题的答案很简单。要找到具有相同级别的前一个元素,您需要做的就是减少" i "并检查水平是否相同。如果没有,那么再次减少。
iplus26完全是什么。
答案 3 :(得分:0)
我想你想要这样的东西:
function prevItemSameLv(data, i) {
for (var idx=i-1; idx>=0; idx--) {
if (data[idx].lv == data[i].lv) return data[idx];
}
}
答案 4 :(得分:0)
你可以使用像_lodash这样的库,它有一个名为“findIndex”的函数,在这里阅读更多:https://lodash.com/docs#findIndex但它只返回一个值。
此外,您可以查看有关过滤数据的问题:lodash Filter collection using array of values