Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在字符串中搜索多维数组中找到的关键字?_Javascript_Jquery_Arrays_Multidimensional Array_Node.js - Fatal编程技术网

Javascript 如何在字符串中搜索多维数组中找到的关键字?

Javascript 如何在字符串中搜索多维数组中找到的关键字?,javascript,jquery,arrays,multidimensional-array,node.js,Javascript,Jquery,Arrays,Multidimensional Array,Node.js,所以我有一些数据如下所示: stringToSearch = 'this string needs to be searched'; labels = ['keys 1-3','keys 4-6','keys 7-9']; keywords = ['key1', 'key2', 'key3'], ['key4', 'key5', 'key6'], ['key7', 'key8', 'key9'] ]; 编辑: 基本上,我试图实现的是,在字符串中搜索任何键。然后查找与

所以我有一些数据如下所示:

stringToSearch = 'this string needs to be searched';

labels = ['keys 1-3','keys 4-6','keys 7-9'];

keywords =
    ['key1', 'key2', 'key3'],
    ['key4', 'key5', 'key6'],
    ['key7', 'key8', 'key9']
];
编辑: 基本上,我试图实现的是,在字符串中搜索任何键。然后查找与键所在的组相对应的所有标签

编辑:目标是传入字符串并取回标签

string='this包含键5和键9'

因此,它返回标签“键4-6”和“键7-9”

尝试以下操作:

stringsToSearch = ['this string needs to be searched', '...']

keywords = {
    firstGroup: {
        key1: [],
        key2: [],
        key3: []
    },
    secondGroup: {
        key4: [],
        key5: [],
        key6: []
    },
    thirdGroup: {
        key7: [],
        key8: [],
        key9: []
    }
}

$.each(keywords, function(groupName, keyGroup) {
    $.each(keyGroup, function(key, foundStrings) {
        $.each(stringsToSearch, function() {
            if(this.search(key) >= 0)
                foundStrings.push(this);
        });
    });
});

在普通的旧Javascript中,我会使用如下内容:

var stringToSearch = 'this string needs to be key2 searched key4';

var Keywords = function(keywords, label) {
    this.keywords = keywords;
    this.label = label;
}

var keywords1 = new Keywords(['key1', 'key2', 'key3'], 'keys 1-3');
var keywords2 = new Keywords(['key4', 'key5', 'key6'], 'keys 4-6');

var keywordsArray = [ keywords1, keywords2 ];

for (var i=0; i <keywordsArray.length; i++) {
    var keywordsEntry = keywordsArray[i];
    for(var j=0; j <keywordsEntry.keywords.length; j++) {
        // here you got the index of the occuring keyword
        if(stringToSearch.indexOf(keywordsEntry.keywords[j]) > 0) {
            // now do sth. with the label
            alert(keywordsEntry.label);
        }
    }
}
var stringToSearch='此字符串需要用key2搜索key4';
变量关键字=函数(关键字、标签){
这个.关键词=关键词;
this.label=标签;
}
var关键字1=新关键字(['key1'、'key2'、'key3']、'key1-3');
var关键字2=新关键字(['key4'、'key5'、'key6']、'key4-6');
var关键字数组=[keywords1,keywords2];

对于(var i=0;i或可能是这个,因为不清楚您想要什么:

stringsToSearch = ['this string needs to be searched', '...']

keywords = {
    label1: {
        keys: ['key1', 'key2', 'key3'],
        matches: []
    },
    label2: {
        keys: ['key4', 'key5', 'key6'],
        matches: []
    },
    label3: {
        keys: ['key7', 'key8', 'key9', 'key10', 'key11'],
        matches: []
    }
}

$.each(keywords, function(labelName, label) {
    $.each(stringsToSearch, function(_, stringToSearch) {
        $.each(label.keys, function(_, key) {
            if(stringToSearch.search(key) >= 0) {
                label.matches.push(stringToSearch);
                return false;
            }
        });
    });
});

根据您最近的编辑,这里有另一个解决方案:

stringToSearch = 'this string needs to be searched';

labelsToApply = {
    myFirstLabel: ['key1', 'key2', 'key3'],
    anotherLabel: ['key4', 'key5', 'key6'],
    lastLabel:    ['key7', 'key8', 'key9', 'key10', 'key11'],
}

function getLabels(str, labels) {
    var appliedLabels = [];
    $.each(labels, function(labelName, keywords) {
        $.each(keywords, function() {
             if(str.search(this) >= 0) {
                 appliedLabels.push(labelName);
                 return false;
             }
        });  
    });
    return appliedLabels;
}

alert(getLabels(stringToSearch, labelsToApply));

“标记字符串”是什么意思?我还不确定我到底要怎么做。计划在我弄清楚如何找到正确的值来标记它之后再弄清楚。编辑了那个部分,很抱歉。我已经为你的问题的最新迭代添加了唯一需要的是跟踪组名,但这应该很简单。它也将是good用于跟踪搜索字符串中找到每个目标的位置。“跟踪组名”是什么意思?它通过在组对象中存储与键匹配的字符串来实现这一点啊,我明白你的意思-那没关系:-)(保留子字符串的索引可能还是不错的。)但不是原始问题的一部分。@Eric嗯,我只是在键入原始问题,其中作者表示希望以某种方式“标记”搜索字符串。我只是想知道这些位置会很方便;用字符串和索引推送一个小对象可能很容易。。无论如何,我对你的答案投了更高的票,因为它相当优雅。我认为这肯定会奏效,但我有一个问题。标签(以及键)是用户提交的字符串。将它们注入哈希表的最佳方法是什么?
labelsToApply['newLabel']=newKeys
?好的,我可能不太清楚哈希表是如何工作的。我可以只通过声明
labelsToApply['newLabel']=['new','Keys']
来传递新数据吗?
'newLabel'
是否需要以特定的方式格式化,例如不使用空格?@float:Yep,这很好。标签名称的格式根本不重要。如果要向现有标签添加密钥,请执行以下操作:
labels应用['existingLabel']。推送('additionalKey')
。aweeeeeesommmmmmmeeeee:)