Javascript findIndex不是';t返回正确的索引

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

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({'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我是错误的类型是对象,我转换为字符串,它解决了问题。