在 node.js 中的数组内查找字符串的最佳方法是啥?

Posted

技术标签:

【中文标题】在 node.js 中的数组内查找字符串的最佳方法是啥?【英文标题】:what is the best way to find string inside array in node.js?在 node.js 中的数组内查找字符串的最佳方法是什么? 【发布时间】:2016-04-30 18:46:38 【问题描述】:

我有一个 node.js 脚本,我想在其中查找给定字符串是否包含在数组中。 我该怎么做?

谢谢。

【问题讨论】:

我不明白你的问题?您想在数组中查找字符串吗?请更好地描述你的问题。一个评论的例子会很有帮助。您的小提琴中的一些 cmets 也有助于找出您想知道的内容。 编辑。有时间请再看一遍。 【参考方案1】:

如果我理解正确,您正在寻找数组中的字符串。

一种简单的方法是使用indexOf() 函数,它为您提供找到字符串的索引,或者在找不到字符串时返回-1。

例子:

var arr = ['example','foo','bar'];
var str = 'foo';
arr.indexOf(str); //returns 1, because arr[1] == 'foo'

str = 'whatever';
arr.indexOf(str); // returns -1 

编辑 19/10/2017

ES6 的引入给了我们: arr.includes('str') //true/false

【讨论】:

嘿,谢谢。但是,如果我希望字符串是来自用户的 var 怎么办?另外,我在哪里将匹配的代码放在我的函数中?看看jsfiddle。我是 node.js 的新手,所以感谢您的帮助。 在这种情况下,var str = process.argv[2] 应该可以解决问题 尝试这样做:jsfiddle.net/eyal4/qe0r1z26,它给了我一个错误。我还希望它打印完整的 str - 尤其是包含此 str 的 evrey 字符串。我想这有点难,但感谢您的帮助!我怎样才能把它弄干净?【参考方案2】:

在 NodeJS 中,如果您希望匹配字符串数组中的部分字符串,您可以尝试以下方法:

const strings = ['dogcat', 'catfish']
const matchOn = 'dog'

let matches = strings.filter(s => s.includes(matchOn))

console.log(matches) // ['dogcat']

编辑: 应要求如何在提供的上下文小提琴中使用:

var fs = require('fs');                                           
var location = process.cwd();                                     


var files = getFiles('c:/Program Files/nodejs');                                 
var matches = searchStringInArray('c:/Program Files/nodejs/node_modules/npm/bin', files);


console.log(matches);                                             

function getFiles (dir, files_)                                  
    var str = process.argv[2];                                    
    files_ = files_ || [];                                        
    var files = fs.readdirSync(dir);                              
    for (var i in files)                                         
        var name = dir + '/' + files[i];                          
        if (fs.statSync(name).isDirectory())                     
            getFiles(name, files_);                               
         else                                                   
            files_.push(name);                                    
                                                                 
                                                                 

    return files_;                                                
                                                                 

function searchStringInArray (find, files_)                      
    return files_.filter(s => s.includes(find))                   

                                                                 

【讨论】:

嘿,谢谢。但是,如果我希望字符串是来自用户的 var 怎么办?另外,我在哪里将匹配的代码放在我的函数中?看看jsfiddle。我是 node.js 的新手,所以感谢您的帮助。 把它放在一个函数中。我正在返回匹配列表,而不是像你一样的数字。不知道你是不是这个意思。 好的,谢谢,但我一直在努力做到这一点jsfiddle.net/eyal4/qe0r1z26/1 就像你说的那样,那不是什么都不打印。我如何打印包含该字符串的 evrey 字符串以及我在哪里将它放在我的代码中。再次感谢【参考方案3】:

另一种方法是使用some

players = [];

const found = this.players.some(player => player === playerAddress);

if (found) 
    // action
 else 
    // action

【讨论】:

以上是关于在 node.js 中的数组内查找字符串的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在node.js中查找两个地理点(lats,longs)之间距离的最佳方法

Node.js:查找附近的事件 [重复]

讨论:使用 node.js / socket.io 实现聊天室的最佳方式?

Node.JS + MongoDB聚合从MongoDB中的DataBase中查找数组中的数组

查找项目是不是在 JavaScript 数组中的最佳方法? [复制]

查找位置的最佳 node.js 模块? [关闭]