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