Javascript - 在数组中搜索整个单词并创建具有巧合的新数组

时间:2016-04-30 14:50:15

标签: javascript arrays if-statement

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

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

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

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

我需要创建一组新数组,其中仅包含来自data的{​​{1}}元素,其中包含来自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”。
  • 此外,它还会包含在 5th 数组中,因为“电压”也会出现。

可以在多个新阵列中分配阵列,但不能在其他阵列中分配:

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

无法在新阵列中分配数组:

> 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]);
    }

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

2 个答案:

答案 0 :(得分:1)

要在字符串中搜索整个单词,您可以使用:

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'

并且您希望完全搜索“&#39; Value&#39;”,您可以使用

转换数组中的字符串
var content = 'firstValue,secondValue,thirdValue,Value';
var contentAsArray = content.split('');
var hasElement = contentAsArray.indexOf('Value') != -1;

请注意,此技巧假设您的单词被&#39;,&#39;。

分隔

在你的情况下,我认为你可以像使用它一样。因此,您不必将其转换为字符串并再次返回到数组。

data[1].indexOf('wordThatYouWant')

答案 1 :(得分:0)

如果您只想搜索整个单词,那么排除&#34; delight&#34;当你在寻找&#34; light&#34;时,你可以使用内部有\b转义的正则表达式。

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

以下是一些代码,将搜索字词转换为带有\b的正则表达式:

&#13;
&#13;
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>');
&#13;
&#13;
&#13;