Javascript findIndex不是';t返回正确的索引
findeIndex未在express router函数中返回正确的索引Javascript findIndex不是';t返回正确的索引,javascript,arrays,node.js,express,mongoose,Javascript,Arrays,Node.js,Express,Mongoose,findeIndex未在express router函数中返回正确的索引 module.exports.nearestOffices = (req, res, next) => { Order.findById(req.params.idOrder).exec() .then(order => { return Promise.all([ Promise.resolve(order), Office.find({'locatio
module.exports.nearestOffices = (req, res, next) => {
Order.findById(req.params.idOrder).exec()
.then(order => {
return Promise.all([
Promise.resolve(order),
Office.find({'location': {$near: order.address_deliver.location, $maxDistance: maxDistance}}).sort({'timeToFinish': -1}).exec()
]);
})
.then(rslts => {
let order = rslts[0];
let offices = rslts[1];
console.log('findIdex test: ', offices[0].stockProducts.findIndex(o => {
console.log(o.product, '===', order.products[1].product);
return o.product === order.products[1].product;
}));
return Promise.resolve('message');
})
.then(rslt => res.json(rslt))
.catch(err => next(err));
}
变量订单和办公室的内容包括:
//offices
[
{
"stockProducts": [
{
"product": "58c1a7f62193b95eec1765ad",
"_id": "58c1a7f72193b95eec1765ae",
"stock": 3
},
{
"product": "58c1a8212193b95eec1765af",
"_id": "58c1a8212193b95eec1765b0",
"stock": 15
},
{
"product": "58c1a84a2193b95eec1765b1",
"_id": "58c1a84a2193b95eec1765b2",
"stock": 20
},
{
"product": "58c1a85f2193b95eec1765b3",
"_id": "58c1a85f2193b95eec1765b4",
"stock": 10
}
]
}
];
//order
{
"products": [
{
"product": "58c1a84a2193b95eec1765b1",
"price": 2,
"cant": 5,
"_id": "58c1c0e57b32c431d99a3969"
},
{
"product": "58c1a8212193b95eec1765af",
"price": 6,
"cant": 2,
"_id": "58c1c1107b32c431d99a396a"
}
]
};
console.log的输出为:
58c1a7f62193b95eec1765ad '===' 58c1a8212193b95eec1765af
58c1a8212193b95eec1765af '===' 58c1a8212193b95eec1765af
58c1a84a2193b95eec1765b1 '===' 58c1a8212193b95eec1765af
58c1a85f2193b95eec1765b3 '===' 58c1a8212193b95eec1765af
findIdex test: -1
它应该在第二行返回1,但我不知道为什么不返回,我在另一个没有函数的js文件中测试了它,它工作得很好,我不知道为什么它在这里不工作。问题在于mongoose,显然它返回的是对象值而不是字符串值。所以答案是:
console.log('findIdex test: ', offices[0].stockProducts.findIndex(o => {
console.log(o.product.toString(), '===', order.products[1].product.toString());
return o.product.toString() === order.products[1].product.toString();
}));
如果您使用了
==
,那么o.product的类型和订单.products的类型是什么[1]。product
?@Bergi两者都是字符串。我也用==试过了,但也不起作用,我已经试了3个小时了。可能有一些空白或什么的,试试修剪it@Bergi我是错误的类型是对象,我转换为字符串,它解决了问题。