【发布时间】:2023-06-07 15:46:01
【问题描述】:
我正在尝试使用reduce() 理解和陈述以下算法的大 O 表示法。我的理解是reduce是一个应用于数组对象的函数。它接受一个回调和一个初始值。下面的代码是一个保存算法的控制器:
export const getPublicID = (req, res) => {
const data = req.body.result;
if (!data) res.status(422).json({ success: false, message: 'Upload Failed!' });
console.time('ARRAY');
const insertStuff = data.reduce((array, item) => {
array.push({
public_id: item.public_id,
url: item.url,
thumbnail_url: item.thumbnail_url
});
return array;
}, []);
console.timeEnd('ARRAY');
Photo.insertMany(insertStuff)
.then(
img => res.status(201).json({
success: true,
message: 'Successfully added to database.',
cloudinary: img
}),
err => res.status(422).json({ success: false, message: err })
);
};
req.body.result 以对象数组的形式出现,通过 reduce 方法,我创建了自己的对象数组,然后将其插入到我的 MongoDB 集合中。
Reduce 正在遍历数组,所以我认为这是 O(n),因为存在的元素越多,迭代所需的时间就越多,因此是一个线性图。如果这是正确的假设,我的三个问题是以下如何影响我的算法:
push()insertMany()- 承诺
感谢您帮助数据结构和算法的菜鸟了解代码的优缺点,非常感谢!
【问题讨论】:
-
insertMany似乎是一个异步调用。运行时间可能会有所不同。 -
@RajaprabhuAravindasamy 我将不得不对此进行研究,但我相信你是对的,这是 Mongo 图书馆的一种方法。
标签: javascript arrays mongodb algorithm