在 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 };
}) ;
请注意,如果条件不满足,
item
和
index
可能未定义。
要删除未定义,您可以将 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