我不确定在对象数组中使用 indexOf
无效的代码是:
if (res.locals.company.companies.indexOf(req.query.companyId) >= 0) return next()
if 条件总是返回 false。
我也在console中测试过,其实是错误的:
>> var zio = { __v: 1,
_id: '50bc0238049a1ff10b000001',
companies:
[ { _id: '50bc01938f164ee80b000001', name: 'Test' },
{ _id: '50bc01ac4e860ee90b000001', name: 'zio' } ],
}
>> zio.companies.indexOf("50bc01938f164ee80b000001")
-1
而这应该是真的。
我应该使用任何神秘的下划线实用程序吗?
更新/澄清:我的目的只是检查其中一个 ID 中是否存在 50bc01938f164ee80b000001,我不需要知道它的实际位置。这对性能非常关键!
Nodejs 解决方案或技巧会很棒!
最佳答案
没有错。该数组 不包含那样的字符串,而只包含两个对象引用。因此,结果是正确的 -1
。
要从包含搜索到的字符串值的对象引用中获取索引,我们可以这样做
var index;
zio.companies.some(function( obj, idx ) {
if( obj._id === '50bc01938f164ee80b000001' ) {
index = idx;
return true;
}
});
console.log('index is: ', index);
根据您的忍者编辑,如果您只想知道该数组是否包含一个持有特定 id 的对象引用,请像这样使用它
var check = zio.companies.filter(function( obj ) {
return obj._id === '50bc01938f164ee80b000001';
});
if( check.length ) {
console.log('yep');
} else {
console.log('nope');
}
第二次编辑:如果您真的只是追求性能,您可能不希望在任何搜索中有任何函数调用开销。我会用类似的东西
function inObject(arr, search) {
var len = arr.length;
while( len-- ) {
if(arr[len]._id === search)
return true;
}
}
if( inObject( zio.companies, 'AAA' ) ) {
}
该代码比此处提供的任何代码片段高出几个数量级。 See Here
关于javascript - Node中对象数组中的IndexOf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14016476/