更新:这是带有实时示例链接的代码沙箱。我的用例是构建一个虚拟滚动。我能够以某种方式得到它,请提出更好的方法或改进。
我有一个嵌套的类列表数组和一个学生列表。类似的东西。
"Classes":
[
{
"ClassId": "XX",
"ClassTitle": "XX",
"Students": [
{
"StudentId": "XX",
"StudentName": "XX",
"Marks": "XX",
"etc": "XX"
},
{
"StudentId": "XX",
"StudentName": "XX",
"Marks": "XX",
"etc": "XX"
},
{
"StudentId": "XX",
"StudentName": "XX",
"Marks": "XX",
"etc": "XX"
}
]
},
{
"ClassId": "XX",
"ClassTitle": "XX",
"Students": [
{
"StudentId": "XX",
"StudentName": "XX",
"Marks": "XX",
"etc": "XX"
},
{
"StudentId": "XX",
"StudentName": "XX",
"Marks": "XX",
"etc": "XX"
},
{
"StudentId": "XX",
"StudentName": "XX",
"Marks": "XX",
"etc": "XX"
},
{
"StudentId": "XX",
"StudentName": "XX",
"Marks": "XX",
"etc": "XX"
}
]
},
{
"ClassId": "XX",
"ClassTitle": "XX",
"Students": [
{
"StudentId": "XX",
"StudentName": "XX",
"Marks": "XX",
"etc": "XX"
}
]
},
{
"ClassId": "XX",
"ClassTitle": "XX",
"Students": [
{
"StudentId": "XX",
"StudentName": "XX",
"Marks": "XX",
"etc": "XX"
},
{
"StudentId": "XX",
"StudentName": "XX",
"Marks": "XX",
"etc": "XX"
}
]
}
]
我正在尝试获取嵌套列表的拼接功能。展平列表不适用于我的情况,因为我需要完整的原始结构。
我尝试过这样的事情。有人可以帮我弄这个吗?有没有更好的方法让它更简单。
getNestedSplicedData(nestedItems, startIndex, endIndex) {
console.log("Start and end indexes are:", startIndex, endIndex);
let visibleItems = [];
let currentIndex = 0;
let totalReqItems = endIndex - startIndex + 1;
for (let i = 0; i < nestedItems.length; i++) {
let currentItem = nestedItems[i];
let childItemsLength =
currentItem[this.childPropertyName] &&
currentItem[this.childPropertyName].length
? currentItem[this.childPropertyName].length
: 0;
const nextItemIndex = currentIndex + childItemsLength + 1;
if (nextItemIndex - 1 < startIndex) {
// skip previous items
currentIndex = nextItemIndex;
// totalReqItems = totalReqItems - (childItemsLength + 1);
} else if (nextItemIndex < endIndex && startIndex < currentIndex) {
// currentItem.Name = currentItem.Name + " - " + totalReqItems; // TODO: Remove it
visibleItems.push(currentItem);
currentIndex = nextItemIndex;
totalReqItems = totalReqItems - (childItemsLength + 1);
} else {
let currentItemClone = _.cloneDeep(currentItem);
let st = startIndex - currentIndex -1;
if (st < 0) {
st = 0;
}
// -1 is for inclussion of root node.
// another -1 is for the item at start index.
let ed = st + totalReqItems -1 -1;
if (ed >= childItemsLength) {
ed = childItemsLength - 1;
}
currentItemClone[this.childPropertyName] = currentItemClone[
this.childPropertyName
].slice(st, ed + 1);
// currentItemClone.Name = currentItemClone.Name + " - " + totalReqItems; // TODO: Remove it
visibleItems.push(currentItemClone);
currentIndex = nextItemIndex;
totalReqItems = totalReqItems - (ed - st + 1) - 1; // totalReqItems - childLength - parent Item
}
if (totalReqItems <= 0) {
debugger;
break;
}
}
return visibleItems;
}
}
我试图使该函数通用以适用于任何类型的一级父子结构的嵌套结构。