Return Javascript 中的 2 个变量 - Node Js 应用程序

Return 2 variables in Javascript - Nodjs application

我想在数组中找到一个项目和这个项目的索引,并将其存储在 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 is not iterable (cannot read 属性 Symbol(Symbol.iterator)) TypeError: undefined is not iterable (cannot read 属性 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 };
         }) ;

您可以 return 将一个函数的多个值包装在一个可迭代对象中。请参阅this link解构赋值。

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");

Array.forEach 不 return 任何值。您应该改用地图:

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

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

要删除未定义,您可以使用 Array.filter 链接映射结果:

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