2017-03-10 66 views
0

findeIndex在快速路由器函数中未返回正确的索引。findIndex未返回正确的索引

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文件中测试了它,它工作得很好,我不知道为什么它不起作用。

+0

鉴于您使用过'===','typeof o.product'和'typeof order.products [1] .product'是什么? – Bergi

+0

@Bergi他们都是字符串。我也尝试过==,它也不起作用,我一直在这样的3个小时。 – yosiprompt

+2

也许有一些白色空间或什么的,尝试修剪它 –

回答

0

问题在于猫鼬,显然它返回的对象值不是字符串值。所以答案是:

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(); 
}));