pig*_*ack 2 javascript node.js
我不确定在对象数组中使用indexOf
不起作用的代码是:
if (res.locals.company.companies.indexOf(req.query.companyId) >= 0) return next()
Run Code Online (Sandbox Code Playgroud)
if条件总是返回false.
我也在控制台测试过它实际上是错误的:
>> var zio = { __v: 1,
_id: '50bc0238049a1ff10b000001',
companies:
[ { _id: '50bc01938f164ee80b000001', name: 'Test' },
{ _id: '50bc01ac4e860ee90b000001', name: 'zio' } ],
}
>> zio.companies.indexOf("50bc01938f164ee80b000001")
-1
Run Code Online (Sandbox Code Playgroud)
而它应该是真的.
我应该使用任何神秘的下划线实用程序吗?
更新/澄清:我的目的是检查其中一个ID中是否存在50bc01938f164ee80b000001,我不需要知道它实际上在哪里.这非常重要!
Nodejs的解决方案或提示会很棒!
这没错.该Array不包含类似的String,但只包含两个Object引用.因此,结果是正确的-1.
要从包含搜索到的字符串值的Object引用中获取索引,我们可以这样做
var index;
zio.companies.some(function( obj, idx ) {
if( obj._id === '50bc01938f164ee80b000001' ) {
index = idx;
return true;
}
});
console.log('index is: ', index);
Run Code Online (Sandbox Code Playgroud)
基于你的忍者编辑,如果你只是想知道该数组是否包含一个持有特定id的对象,请像使用它一样
var check = zio.companies.filter(function( obj ) {
return obj._id === '50bc01938f164ee80b000001';
});
if( check.length ) {
console.log('yep');
} else {
console.log('nope');
}
Run Code Online (Sandbox Code Playgroud)
第二次编辑:如果你真的只是在演出之后,你可能不希望在任何搜索中都有任何函数调用开销.我会用类似的东西
function inObject(arr, search) {
var len = arr.length;
while( len-- ) {
if(arr[len]._id === search)
return true;
}
}
if( inObject( zio.companies, 'AAA' ) ) {
}
Run Code Online (Sandbox Code Playgroud)
该代码超出了此处提供的任何代码段数量级.看这里
| 归档时间: |
|
| 查看次数: |
10057 次 |
| 最近记录: |