开发者问题收集

在 Javascript 中返回 2 个变量 - Nodejs 应用程序

2022-05-24
62

我想在数组中查找一个项目及其索引,并将其存储在 2 个单独的变量中。编程新手,但很难解决这个问题。我尝试过析构,但没有用

const [{item:item,index:index}] = notification.pendingQueue.forEach((item,index)=>
         {
             if(item.taskId.toString()  === req.params.taskId)
             return [{item, index}];
         })

也试过了

const data = notification.pendingQueue.forEach((item,index)=>
         {
             if(item.taskId.toString()  === req.params.taskId)
             return ({'item': item,  'index': index})
         }) 
         

         console.log("item", data.item );

我收到此错误

undefined 不可迭代(无法读取属性 Symbol(Symbol.iterator))TypeError:undefined 不可迭代(无法读取属性 Symbol(Symbol.iterator))

------ 编辑 -------------

根据社区成员的建议,我尝试了 .map 方法,但现在的问题是,如果第二个元素符合条件,我会得到这样的结果。

[undefined, {item,index}, undefined]

因此,执行对象析构正成为一个问题。我希望最终的数组仅包含匹配的对象并删除所有未定义的值。

const [{ item, index }] = notification.pendingQueue.map((item,index)=>
         {
             if(item.taskId.toString()  === req.params.taskId)
             return { item, index };
         }) ;
2个回答

Array.forEach 不返回任何值。您应改用 map :

const [{ item, index }] = notification.pendingQueue.map((item,index)=>
         {
             if(item.taskId.toString()  === req.params.taskId)
             return { item, index };
         }) ;

请注意,如果条件不满足, itemindex 可能未定义。

要删除未定义,您可以将 map 结果与 Array.filter 链接起来:

const [{ item, index }] = notification.pendingQueue.map((item,index)=>
         {
             if(item.taskId.toString()  === req.params.taskId)
             return { item, index };
         }).filter(elem => elem !== undefined) ;
Jordan Breton
2022-05-24

您可以通过将多个值包装在可迭代对象中来从函数返回多个值。请参阅 此链接 以了解解构赋值。

function coordinates (country = null) {
   if (!country) return [-1, -1];
   // ...
   let lat = "19.9823";
   let lon = "0.9039";
   return [lat, lon];
}

const [a, b] = coordinates("London, UK");

function coordinates (country = null) {
   if (!country) return {-1, -1};
   // ...
   let lat = "19.9823";
   let lon = "0.9039";
   return {lat, lon};
}
const {lat, lon} = coordinates("Tokyo, JP");
matabeitt
2022-05-24