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 };
}) ;
请注意,如果不满足您的条件,item
和 index
可能未定义。
要删除未定义,您可以使用 Array.filter
链接映射结果:
const [{ item, index }] = notification.pendingQueue.map((item,index)=>
{
if(item.taskId.toString() === req.params.taskId)
return { item, index };
}).filter(elem => elem !== undefined) ;
我想在数组中找到一个项目和这个项目的索引,并将其存储在 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 };
}) ;
请注意,如果不满足您的条件,item
和 index
可能未定义。
要删除未定义,您可以使用 Array.filter
链接映射结果:
const [{ item, index }] = notification.pendingQueue.map((item,index)=>
{
if(item.taskId.toString() === req.params.taskId)
return { item, index };
}).filter(elem => elem !== undefined) ;