Node.js:返回数组中两个特定元素之间的元素



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)

相关内容

  • 没有找到相关文章

最新更新