Tag: 数组

将嵌套对象转换为数组

我有一个包含其他对象的对象,如: let foo = { a: { b: {}, c: {} }, d: { e: {} } }; 现在我想把它转换成一个对象数组,其中前两个级别的键形成一个键/值对,例如: let transformedFoo = [ { outer: 'a', inner: 'b' }, { outer: 'a', inner: 'c' }, { outer: 'd', inner: 'e' } ]; 我目前的做法是这样的: let fooTransformed = []; Object.keys(foo).forEach(function (outerKey) { Object.keys(foo[outerKey]).forEach(function (innerKey) { fooTransformed.push({ outer: […]

JavaScript数组元素不改变

我正在通过NodeSchool的learnyounode工作。 在这个问题中,我们提供了三个URL作为前三个命令行参数。 我们必须收集每个URL提供给我们的完整内容,并将其打印到控制台(stdout)。 我们不需要打印出长度,只是将数据打印成string; 每个URL一行。 问题是,我们必须按照与提供给我们的URL相同的顺序将其打印出来,作为命令行参数。 这是我目前的解决scheme尝试,但是,似乎有一个问题。 程序进入一个无限循环,我不知道为什么。 看来Promise中的Promise对象似乎并没有根据相应的response.on('end', …)来更新自己response.on('end', …) 。 任何帮助将非常感激。 var http = require('http'); // Wraps an http GET request. // Three attributes // – data : String // – resolved : boolean // – error : Error function Promise(url) { this.resolved = false; this.error = null; this.data = ''; var self […]

用MongoDB向上插入项目数组

我有一个我想插入到MongoDB集合的对象数组,但是我想检查每个项目是否已经存在于集合中。 如果不存在,则插入它,如果存在,则不要插入它。 谷歌search后,看起来像我最好使用更新方法与upsert属性设置为true。 这似乎工作得很好,如果我传递一个单一的项目,以及如果我迭代我的数组,并一次插入一个项目,但我不知道这是否是正确的方法来做到这一点,或者如果它最高效的。 以下是我目前正在做的事情: var data = [{}, {}, … {}]; for (var i = 0; i < data.length; i++) { var item = data[i]; collection.update( {userId: item.id}, {$setOnInsert: item}, {upsert: true}, function(err, result) { if (err) { // Handle errors here } }); } 迭代我的数组并逐个插入它们是最有效的方法,或者有更好的方法吗?

嵌套在async.eachSeries循环中的async.series会尽早终止发送POST响应

我在一个包含一个对象数组(requestArray)的POST调用的接收结束。 在响应POST之前,我需要依次通过一系列函数传递数组的对象。 我select了asynchronous库来帮助我完成这个任务,但是我很难控制代码的执行stream程。 我正在使用全局数组来存储每个函数(responseArray)的结果。 一些function取决于先前function的结果。 我不想使用async.waterfall(),因为1.我将不得不重写我的代码和2.我可能会遇到相同的早期循环终止问题。 下面是我的代码有问题的代码。 app.post('/test', function(req, res) { var importArray = req.body; var iteration = 0; async.eachSeries(importArray, function(data, callback) { var index = importArray.indexOf(data); var element = data.element; exportArray[index] = []; async.series([ function(callback) { process1(data, index, callback); }, function(callback) { process2(element, index, callback); }, function(callback) { process3(element, index, callback); }], function(err, results) […]

如何在asynchronous调用期间填充数组并将其发送到响应对象中

这是我试图做的一个例子,检索mongo数据库中的所有post,为每个post填充作者,然后使用作者对象从Cloudinary检索configuration文件图片。 什么是正确的方式去做这个? 我已经尝试了许多方法来填充数组,并在响应中发送这些数据,但是由于asynchronous调用,它们在发送数据之前从不运行。 router.get('/posts',auth, function(req, res, next) { //var id = req.payload._id; Post.find(function(err, posts){ if(err){ return next(err); } posts.forEach(function(post){ post.populate('author',function(err,post){ post.image = cloudinary.image("v"+post.author.avatarVersion+"/profile/"+post.author._id,{ width:100, height:100,crop:'thumb',gravity:'face',radius:'max' }) //here the post object is updated console.log(post) }) }) //res.json(some posts array); }); }); 感谢Dan Moldovan的解决scheme! router.get('/posts',auth, function(req, res, next) { var id = req.payload._id; Post.find({}).populate('author').exec(function(err,posts){ if(err){ return next(err); […]

我应该打扰在node.js中清理数组吗?

在我的一个脚本中,我广泛使用了数组来临时存储数据。 我面临的问题是我有很多代码处理数组,所以我经济地使用这个空间。 我应该甚至打扰,因为Node.js数组是关联数组? 我目前的解决scheme是: //Get the minimum empty id in array function get_id(callback) { var i = 0; while(array[i] != null) { i = i + 1; } array[i] = 0; callback(i); } get_id(function (i) { array[i] = {large object}; //… array[i] = null; }); 但我觉得这是错误的,容易出错。 我可以做: array[i] = {large object}; i = i + […]

迭代时修改数组

在迭代数组的同时尝试修改当前项目时,修改失败。 以下是示例代码。 var s_arr = [{a: 1, b: 2}, {a: 3, b: 4}, {a: 5, b: 6}]; var arr = []; for(var i in s_arr) { if(s_arr[i].a == 5) { s_arr[i].b = 0; console.log('First modification: ' +JSON.stringify(s_arr[i])); arr.push(s_arr[i]); s_arr[i].b = 9; console.log('Second modification: ' +JSON.stringify(s_arr[i])); arr.push(s_arr[i]); } } console.log('Final: ' +JSON.stringify(arr)); 运行上面的脚本node test.js ,结果如下。 First […]

Array.every() – 返回可能的callback?

我正在parsinginput文件,并使用Array.every函数运行每个元素。 根据结构,需要手动input用户。 所以如果你有这样的例子: configData.users.every(function(user){ if(user.enabled == 1){ if(user.mobile == 1){ prompt.start(); prompt.get(['mCode'], function (err, result) { //Do something… //return needed here! }); }else{ //Do something else… return true; } } }); 所以在我的情况下,提示是在input用户input时调用callback函数。在这一点清除,下一个元素可以处理。 那么我现在怎么调用return来继续every()函数呢? 感谢您的帮助。

如何清理列表中的项目 – Mongoose

我正在与节点和mongoose创build一个用户帐户的网站。 我试图创build一个函数,从mongoose数据库中的embedded式数组中获取所有的追随者,然后呈现列出每个用户的页面。 我能够从数据库中获取原始数组值,例如["follower1", "follower2", "follower3"]这是我的代码为我的函数得到: router.get('/followers/:name', function(req, res, next) { User.findOne({username: req.params.name}, function(err, doc) { if (err) return next(err); console.log(doc.followers); res.render('followers', {title:"Followers", user:req.user, followersnew:doc.followers}); }); }); 在“追随者”页面,它显示followersnew ,作为“ follower1,follower2,follower3 ”但我希望能够列出每个用户。 我试过这个: {{#each followersnew}} <h3>{{followersnew}}</h3> {{/each}} 但是什么也没有显示出来..我被困在如何让每个用户,并干净地列出他们。 谢谢!

添加空对象的空数组在翻转操作数时会产生不同的结果

描述我的问题的最好方法是通过示例来说明: # node v4.3.1 > {} + [] 0 > [] + {} '[object Object]' > [] + {} === {} + [] true 我已经设法find加里·伯恩哈特的一个WAT讲话,用幽默的方式提到了同样的行为,但可悲的是没有解释。 同样的比较和相同的文件也没有帮助理解行为。 在Firefox中发现相同的行为,所以我想这应该是这样,但为什么? 这里发生了什么,为什么翻转操作数会改变结果呢? 更重要的是为什么在我们看到他们的回报价值是不同的时候,为了严格的平等而对这两个expression式进行testing总是会成真的