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

7

我有一个node.js脚本,想要查找给定的字符串是否包含在数组中。我该如何实现?

谢谢。


我不明白你的问题?你想在数组中查找一个字符串吗?请更好地描述你的问题。提供一个有注释的示例会很有帮助。在你的fiddle中添加一些注释也会有助于我们了解你想要知道什么。 - apxp
请编辑。如果你有时间的话,请再看一遍。 - Eyal Cohen
3个回答

31

如果我理解正确,你想在一个数组中查找字符串。

一种简单的方法是使用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 

编辑于2017年10月19日

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


嘿,谢谢。但是,如果我想让字符串成为用户提供的变量怎么办?还有,在我的函数中放置匹配代码的位置在哪里?看一下jsfiddle。我是node.js的新手,所以感谢您的帮助。 - Eyal Cohen
在这种情况下,var str = process.argv[2] 应该可以解决问题。 - xShirase
尝试做这个:https://jsfiddle.net/eyal4/qe0r1z26/,但是它给了我一个错误。我还想打印完整的字符串-准确地说,包含此字符串的每个字符串。我猜有点难,但感谢您的帮助!我该如何干净地做到这一点? - Eyal Cohen

5
在NodeJS中,如果您想在一个字符串数组中匹配部分字符串,可以尝试以下方法:
const strings = ['dogcat', 'catfish']
const matchOn = 'dog'

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

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

编辑:按要求提供在上下文中使用 fiddle 的方法:

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

}                                                                 

嘿,谢谢。但是,如果我想让字符串成为用户提供的变量怎么办?还有,在我的函数中放置匹配代码的位置在哪里?看一下jsfiddle。我是node.js的新手,所以感谢您的帮助。 - Eyal Cohen
我为你编写了一个函数,返回匹配项的列表,而不是像你之前提到的数字。不确定这是否符合你的意愿。 - chriskelly
好的,谢谢。但是我一直在尝试按照您说的方法https://jsfiddle.net/eyal4/qe0r1z26/1/,但是没有输出任何内容。我该如何打印包含该字符串的每个字符串,并将其放在我的代码中的哪里?再次感谢。 - Eyal Cohen

2
另一种方法是使用some
players = [];

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

if (found) {
    // action
} else {
    // action
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接