gpt4 book ai didi

javascript - 在 Javascript 中访问嵌套数据的更好模式

转载 作者:行者123 更新时间:2023-12-02 16:04:37 24 4
gpt4 key购买 nike

我正在编写一些代码,它首先迭代一个数组,然后进一步迭代原始数组中包含的数组。

我最终得到了这个奇怪的模式,我正在重复它,并且我确信它没有被优化。在迭代最后一个 rssFeeds 数组项时,它将“triggerCallback”的值更改为 true。稍后,在迭代 item 数组时,条件会检查 triggerCallback 是否都为 true 并且 items 数组是否正在迭代其最后一项,此时它会触发回调以在 async.js 的 waterfall 模式中使用。

function countSuccessPosts(rssFeeds, cb){
var successCounter = 0;

var triggerCallback = ''

rssFeeds.forEach(function(feed, index, array){
if(index == array.length - 1){
triggerCallback = 'true'
}

feed.itemsToPost.forEach(function(item, itemIndex, itemArray){
if(item.response.id){
++successCounter

}

if(itemIndex == itemArray.length - 1 && triggerCallback == 'true'){
cb(null, rssFeeds, successCounter)
}
})
})

}

构建此模式的更优化方法是什么?

数据结构:RssFeeds 最多有 5 个不同的 itemsToPost 元素。

[
{
"_id": "55808127b8f552c8157f74a7",
"name": "",
"imageUrl": "",
"url": "http://www.taxheaven.gr/bibliothiki/soft/xml/soft_law.xml",
"latestDate": "1434056400000",
"endpoints": [
{
"_id": "554f9319bc479deb1757bd2e",
"name": "Wise Individ",
"id": 26413291125,
"type": "Group",
"__v": 0
}
],
"__v": 1,
"itemsToPost": [
{
"title": "Aριθμ.: Υ194/12.6.2015 Τροποποίηση απόφασης ανάθεσης αρμοδιοτήτων στον Αναπληρωτή Υπουργό Οικονομικών Δημήτριο Μάρδα.",
"summary": "Τροποποίηση απόφασης ανάθεσης αρμοδιοτήτων στον Αναπληρωτή Υπουργό Οικονομικών Δημήτριο Μάρδα.",
"url": "http://www.taxheaven.gr/laws/circular/view/id/21113",
"published_at": 1434056400000,
"time_ago": "5 days ago",
"guid": {
"link": "http://www.taxheaven.gr/laws/circular/view/id/21113",
"isPermaLink": "true"
}
}
]
},
{
"_id": "558093013106203517f96d9c",
"name": "",
"imageUrl": "",
"url": "http://www.taxheaven.gr/bibliothiki/soft/xml/soft_new.xml",
"latestDate": "1434489601236",
"endpoints": [],
"__v": 0,
"itemsToPost": [
{
"title": "Taxheaven - Άμεση ενημέρωση - Έγκαιρη επιστημονική κωδικοποίηση - Καινοτομικά εργαλεία. Κωδικοποιήθηκαν όλοι οι νόμοι στους οποίους επιφέρει αλλαγές ο νόμος 4330/2015",
"summary": {},
"url": "http://www.taxheaven.gr/news/news/view/id/24088",
"published_at": 1434494400000,
"time_ago": "about 4 hours ago",
"guid": {
"link": "http://www.taxheaven.gr/news/news/view/id/24088",
"isPermaLink": "true"
}
}
]
}
]

最佳答案

我没有检查这一点,但它与我当前在项目中使用的非常相似:

function countSuccessPosts(rssFeeds, cb){
async.each(rssFeeds, function(eachFeed, outerCallback) {
async(eachFeed.itemToPost, function(eachItem, innerCallback) {
if(item.response.id) {
//Do Something That Is Actually Async. Could be asking the server for success flag, for instance.
doSomethingThatIsActuallyAsync(item.response.id).then(function (err) {
if (!err) {
successCounter = successCounter + 1;
}
innerCallback();
});
} else { //This could be to skip "empty responses" without the need to go to the server, right?
innerCallback();
}
}, outerCallback);
}, function() {
//All done
cb(null, rssFeeds, successCounter);
});
}

正如其他人提到的,仅当您在内循环中有实际的异步方法调用时才需要它。

关于javascript - 在 Javascript 中访问嵌套数据的更好模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30881719/

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