I有一个文本数组和一个对象,对象键有以下数组值:
text = ['CALX' , 'ENTRY' , 43 , 44 , 'TAR' , 50 , 51 , 52 , 'OK', 'XX' , 'SL' , 12 , YYY]
obj = {
entry : ['ENTRY' , 'ENTER' , 'ENT'],
target :['TARGET' , 'TP' , 'TAR' , 'TARGETS'],
sl : ['STOP' , 'SLOSS' , 'SL' , 'SELL'],
}
简化:
word=文本数组元素(如'CALX'
)
key=对象值数组元素(如'ENTRY'
或'TP'
因此,我想在文本数组中搜索,如果单词等于键,则将单词后面的元素推送到结果对象中的键名称数组,直到文本数组中的后一个元素是另一个关键字或当前密钥
例如,从文本数组和obj,我想要这个输出:
result = {
entry: [43 , 44],
target: [50 , 51 , 52 , 'OK' , 'XX'],
sl: [12 , 'YYY']
}
这是我的代码,我不知道如何在当前单词后返回单词:
text = ['CALX' , 'ENTRY' , 43 , 44 , 'TAR' , 50 , 51 , 52 , 'OK', 'XX' , 'SL' , 12 , YYY]
obj = {
entry : ['ENTRY' , 'ENTER' , 'ENT'],
target :['TARGET' , 'TP' , 'TAR' , 'TARGETS'],
sl : ['STOP' , 'SLOSS' , 'SL' , 'SELL'],
}
result = {
entry: [43 , 44],
target: [50 , 51 , 52 , 'OK' , 'XX'],
sl: [12 , 'YYY']
}
for (var i = 0; i < text.length; i++) {
var word = text[i];
for (var j = 0; j < Object.keys(obj).length; j++) {
var objKeys = Object.keys(obj);
var a = obj[objKeys[j]];
for (var k = 0; k < a.length; k++) {
if (word == a[k]) {
}
}
}
}
console.log(result);
感谢您的帮助
您可以存储最新找到的类型。
const
text = ['CALX' , 'ENTRY' , 43 , 44 , 'TAR' , 50 , 51 , 52 , 'OK', 'XX' , 'SL' , 12 , 'YYY'],
types = { entry : ['ENTRY' , 'ENTER' , 'ENT'], target :['TARGET' , 'TP' , 'TAR' , 'TARGETS'], sl : ['STOP' , 'SLOSS' , 'SL' , 'SELL'] },
result = {};
let type;
for (const item of text) {
let temp = Object.keys(types).find(k => types[k].includes(item));
if (temp) {
type = temp;
result[type] = result[type] || []; // newer: result[type] ??= [];
continue;
}
if (type) result[type].push(item);
}
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
我已经更新了循环供您使用。
let text = ['CALX' , 'ENTRY' , 43 , 44 , 'TAR' , 50 , 51 , 52 , 'OK', 'XX' , 'SL' , 12 , 'YYY']
let obj = {
entry : ['ENTRY' , 'ENTER' , 'ENT'],
target :['TARGET' , 'TP' , 'TAR' , 'TARGETS'],
sl : ['STOP' , 'SLOSS' , 'SL' , 'SELL'],
}
let expectedResult = {
entry: [43 , 44],
target: [50 , 51 , 52 , 'OK' , 'XX'],
sl: [12 , 'YYY']
}
let result = {}
//to reduce loops intially creating a temp array
let tempArr = []
for(key in obj) {
tempArr = [...tempArr, ...obj[key]]
}
for(key in obj) {
result[key] = []
for(let i=0; i< obj[key].length; i++) {
let matchFound = false
for(let j =0; j<text.length; j++) {
if(text[j] == obj[key][i]) {
matchFound = true
}
if(matchFound && tempArr.indexOf(text[j]) == -1) {
result[key].push(text[j])
}
if(matchFound && tempArr.indexOf(text[j+1]) != -1) {
break;
}
}
}
}
console.log(result)