在node.js中找到数组上字符串的最佳方法是什么?

Eya*_*hen 3 arrays string find indexof node.js

直到jsfidlle我的代码,问同样的问题,但是在java中.我有一个在cmd上运行的node.js脚本.我想找到用户在命令末尾给我的字符串(使用procces.argv [2]),是否包含在我的数组中我该怎么做?

link - https://jsfiddle.net/mj4761dk/
Run Code Online (Sandbox Code Playgroud)

希望可以有人帮帮我.谢谢

的Eyal

xSh*_*ase 17

如果我理解正确,你在数组中寻找一个字符串.

一种简单的方法是使用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 
Run Code Online (Sandbox Code Playgroud)

编辑19/10/2017

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


chr*_*lly 5

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

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

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

console.log(matches) // ['dogcat']
Run Code Online (Sandbox Code Playgroud)

编辑: 根据请求如何在上下文中使用提供的小提琴:

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))                   

}                                                                 
Run Code Online (Sandbox Code Playgroud)