Javascript-在一个数组中搜索整个单词,并创建一个符合条件的新数组

Javascript - Search for whole words inside an array and create new array with coincidences

本文关键字:数组 一个 条件 新数组 创建 搜索 Javascript- 单词      更新时间:2023-09-26

具有名为data的数组的array,格式如下:

> data[1].toString()
"Seed Keywords,disconnectors,EUR,210,0.03,,,,,N,Y," 

还有另一个名为groupKeywordsText的数组,其中包含要在数组数据中找到的单词列表:

> console.log(groupKeywordsText);
["switch", "ac", "high", "switches", "disconnect", "voltage", "isolator"]

我需要创建一组新的数组,这些数组只包含data中的元素,其中包含groupKeywordsText中的一个完整单词。

一些示例:

只能在一个新数组中分配数组:

> data[3].toString()
"Keyword Ideas,ac,EUR,1900,0.00,1.58,,,,N,N,"
  • 将被分配给第二个新数组,因为"ac"正是搜索到的术语之一

一个数组可以分配到多个新数组中:

> data[12].toString()
"Keyword Ideas,high voltage,EUR,27100,0.00,1.58,,,,N,N,"
  • 将被分配给第三个新数组,因为"高端"包含要搜索的术语:"high"
  • 此外,它将包含在第5个阵列中,因为"电压"也会出现

一个数组可以在多个新数组中分配,但不能在其他数组中分配:

> data[18].toString()
"Keyword Ideas,isolator for switch,EUR,1100,0.00,1.58,,,,N,N,"
  • 将被分配给第一个新阵列,因为"交换机隔离器"包含要搜索的术语:"switch"
  • 此外,它将包含在6th阵列中,因为"隔离器"也会出现
  • 但是,它不会出现在第4个数组("switch")中,因为我们搜索的是,而且只是确切地搜索"switch"

不能在新数组中分配数组:

> data[28].toString()
"Keyword Ideas,stackoverflow,EUR,1900,0.00,1.58,,,,N,N,"
  • 不会分配给一个新数组,因为"stackoverflow"不是一个搜索词

到目前为止,我的代码看起来像:

    for ( var i = 0, l = groupKeywordsText.length; i < l; i++ ) {
        keywordToSearch = groupKeywordsText[i];
        var length = data.length;
        this["keywordGroup"+i] = [];
                for(var j = 0; j < length; j++) {
                    if (data[j][1] == keywordToSearch) {
                    this["keywordGroup"+i].push(data[j][1]);
                    }
                }
        console.log(this["keywordGroup"+i]);
    }

如何在字符串中搜索完整(而非部分)单词?

要搜索字符串中的完整单词,可以使用:

var myString = 'longStringWithLotsOfWords';
var word = 'String';
var noWord = 'StackOverflow';
myString.indexOf(word) != -1; //true, 'String' is inside myString
myString.indexOf(noWord) != -1; //false, 'StackOverflow' is not inside myString

如果你有像这样的字符串

'firstValue,secondValue,thirdValue,Value'

如果你想准确地搜索"Value",你可以使用转换数组中的字符串

var content = 'firstValue,secondValue,thirdValue,Value';
var contentAsArray = content.split('');
var hasElement = contentAsArray.indexOf('Value') != -1;

注意,这个技巧假设你的单词用","分隔。

在你的情况下,我认为你可以像这样使用它。所以您不必将它转换为字符串,然后再转换回数组。

data[1].indexOf('wordThatYouWant')

如果你只想搜索完整的单词,所以在寻找"light"时排除了"joy",那么你可以使用一个内部有'b转义的正则表达式。

此外,您还需要一个额外的循环,因为您的数据结构有两个维度。

以下是一些代码,使用'b:将搜索词转换为正则表达式

function test() {
    for ( var i = 0, l = groupKeywordsText.length; i < l; i++ ) {
        var keywordToSearch = groupKeywordsText[i];
        // Make regular expression for searching this keyword as whole word only.
        // The keyword might need some escaping so it does not conflict
        // with the regexp syntax:
        var re = new RegExp('''b' + keywordToSearch.replace(/[-'/''^$*+?.()|[']{}]/g, '''$&') + '''b');
        this["keywordGroup"+i] = [];
        for(var j = 0; j < data.length; j++) {
            for(var k = 0; k < data[j].length; k++) {
                // test against the regular expression:
                if (data[j][k] && data[j][k].match(re)) {
                    this["keywordGroup"+i].push(data[j]);
                    break;
                }
            }
        }
    }
    return this;
}
// Sample data
var data = [
    ["Seed Keywords", "disconnectors" ,"EUR", "210" , "0.03" ,,,,,"N","Y"],
    ["ac", "hello", "who's there", "time to switch the lights off"],
    ["electricity", "high voltage", "danger"],
    ["volt and ampère", "a switch turned on"],
];
var groupKeywordsText = ["switch", "ac", "high", "switches", "disconnect", "voltage", "isolator"];
// Call
var result = test.bind({})();
// Show result in snippet
document.write('<pre>' + JSON.stringify(result, null, 4) + '</pre>');