gpt4 book ai didi

javascript - 陷入实现嵌套数据过滤循环的困境,这可能是一种更优雅的方法吗?

转载 作者:太空宇宙 更新时间:2023-11-04 01:01:42 29 4
gpt4 key购买 nike

这是数据。我想要做的是将所有这些数据注入(inject)到一个变量中,该变量包含所有类别以及属于这些类别的所有书籍:

var categories = [

// ...

{
"_id" : "5436b12b456f61180f815c06",
"name" : "Horror"
},

{
"_id" : "5436b43f18bbc8a8073e786e",
"name" : "Action"
}

// ...

];

var books = [

// ...

{
"_id" : "5436b43f18bbc8a8073e786d",
"title" : "The Bourne Legacy",
"category" : "5436b43f18bbc8a8073e786e"
},

{
"_id" : "5436b5c9de9884e010d5ef24",
"title" : "Digital Fortress",
"category" : "5436b50dc6faf3d41071a669"
}

// ...

];

这是我希望数据在过滤后的样子的模型:

categories_titles = [
{
categoryName: 'Category One',
categoryTitles: [
{title: 'Book 1'},
{title: 'Book 2'},
// ...
]
},

{
categoryName: 'Category Two',
categoryTitles: [
{title: 'Book 3'},
{title: 'Book 4'},
// ...
]
}
];

这就是我试图解决问题的方法:

categories_titles= [];

for (var category in categories) {
for (var book in books) {
if (books[book].category == categories[category]._id) {
categories_titles.push(
{
name: categories[category].name,
titles: [
{title: books[book].title}
]
}
);
}
}
}

此方法仅部分有效;所有类别都已列出,但有些类别重复,有些标题缺失或不在应有的位置。

此外,访问项目,例如:categories_titles[0].titles[0].title 是一个相当可怕的问题,我感觉这可以更优雅地解决。

请指教。

最佳答案

确实有更好的方法来做到这一点。我将重新排列你的数据结构。从我的数据结构到你的数据结构的过滤器是线性时间算法,尽管我不明白你为什么想要这样做。但如果必须的话,平移是线性时间。

result = {};

for (var category in categories) {
result[category._id] = {name : category.name, books: []};
}

for (var book in books) {
//Probably also want some safety logic for if result[book.category] is undefined...

addBook(result[book.category].books, book); //you already know how to add your book info, so I won't duplicate that logic.
}

之后,您可以返回结果,或者执行逻辑将结果更改为您的模拟数据结构。但是创建这个初步结构将节省您的计算时间,因为字典访问比多次迭代数组要快得多。

如果 b = 图书数量,c = 类别数量。

算法复杂度:O(b * c)

复杂性我的算法:O(b + c)

复杂性我的算法转换为您的数据结构 O(2 * (b + c)) 尽管内存复杂性增加了。在我看来,这是解决这个问题的一个很好的权衡。 O(b*c) 不太好。

关于javascript - 陷入实现嵌套数据过滤循环的困境,这可能是一种更优雅的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26406599/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com