javascript - Node中对象数组中的IndexOf

标签 javascript node.js

我不确定在对象数组中使用 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/

相关文章:

javascript - Knockout 绑定(bind)在 IE8 中抛出 "Unable to process binding"异常

javascript - 使用西里尔字母布局时,Onkeyup 在 Opera 中不会触发

node.js - 在流中读取csv文件并将它们存储在数据库中

node.js - Sequelize - 如何在嵌套关联中使用 where 子句?

javascript - Jasmine Node 的目的是什么?

node.js - 在 Mongoose 预保存 Hook 中获取模型/集合的名称

javascript - 当我显示 ajax 内容时图像未加载

javascript - 使用 AJAX 运行 PHP 表单

javascript - NodeJS + Passport,检索访问 token (Spotify API)

node.js - 在编写使用 supertest 的测试时访问 req.session 对象