Javascript 从两个数组映射值

Javascript 从两个数组映射值,javascript,arrays,mapping,Javascript,Arrays,Mapping,我正在使用一个文本分析服务(pos),我可以通过它传递一个字符串,告诉我字符串是否包含动词、名词等 我有密码: var words = new pos.Lexer().lex(req.body.Text); var tagger = new pos.Tagger(); var taggedWords = tagger.tag(words); taggedWords然后被传递到车把模板并循环打印 如果我console.log(taggedWords)我会看到一个多维数组,例如: [ [

我正在使用一个文本分析服务(pos),我可以通过它传递一个字符串,告诉我字符串是否包含动词、名词等

我有密码:

var words = new pos.Lexer().lex(req.body.Text);
var tagger = new pos.Tagger();
var taggedWords =  tagger.tag(words);
taggedWords
然后被传递到车把模板并循环打印

如果我
console.log(taggedWords)
我会看到一个多维数组,例如:

[ 
  [ 'Interest-only', 'RB' ],
  [ 'deals', 'NNS' ],
  [ 'allow', 'VB' ],
  [ 'only', 'RB' ],
  [ 'ends', 'NNS' ],
  ...
  ...
]
我想维护一个单独的数组,将上述数组中的值映射到人类可读的版本:

[
  ['RB', 'adjective'],
  ['NNS', 'noun'],
  ['VB', 'verb'],
  ...
  ...
]
然后能够重写,使原始数组(taggedWords)看起来像:

[ 
  [ 'Interest-only', 'adjective' ],
  [ 'deals', 'noun' ],
  [ 'allow', 'verb' ]
]
然后将这个新数组传递给我的模板。最有效的方法是什么?

var taggedWords=[
[‘仅限利息’、‘RB’],
['deals','NNS'],
['allow','VB'],
[‘仅限’、‘RB’],
['结束','NNS']
];
var dico={
“RB”:形容词,
“NNS”:“名词”,
“VB”:“动词”
};
taggedWords.forEach(elt=>{elt[1]=dico[elt[1]]});
console.log(taggedWords)
var taggedWords=[
[‘仅限利息’、‘RB’],
['deals','NNS'],
['allow','VB'],
[‘仅限’、‘RB’],
['结束','NNS']
];
var dico={
“RB”:形容词,
“NNS”:“名词”,
“VB”:“动词”
};
taggedWords.forEach(elt=>{elt[1]=dico[elt[1]]});

console.log(taggedWords)暴力方法将涉及遍历数组中的所有元素,并在另一个数组中找到它们的匹配项,然后将它们推到第三个数组中。这将要求您在一个数组中不具有相同的标记字两次;即:“RB”或“NNS”。希望这能暂时解决你的问题。与前面的答案类似,这种方法的好处是数组中项目的顺序并不重要,因为您将每个元素与其他数组中的每个其他元素进行比较

let array1 = [ 
  [ 'Interest-only', 'RB' ],
  [ 'deals', 'NNS' ],
  [ 'allow', 'VB' ],
  [ 'only', 'RB' ],
  [ 'ends', 'NNS' ]
];

let array2 = [ 
  ['RB', 'adjective'],
  ['NNS', 'noun'],
  ['VB', 'verb'],
];

let array3 = [];

array1.forEach(el => 
{
    array2.forEach(par =>
  {
    if (el[1] === par[0])
    {
        array3.push([el[0], par[1]])
    }
  })
});
console.log(array3);

蛮力方法需要遍历数组中的所有元素,并在另一个数组中找到它们的匹配项,然后将它们推到第三个数组中。这将要求您在一个数组中不具有相同的标记字两次;即:“RB”或“NNS”。希望这能暂时解决你的问题。与前面的答案类似,这种方法的好处是数组中项目的顺序并不重要,因为您将每个元素与其他数组中的每个其他元素进行比较

let array1 = [ 
  [ 'Interest-only', 'RB' ],
  [ 'deals', 'NNS' ],
  [ 'allow', 'VB' ],
  [ 'only', 'RB' ],
  [ 'ends', 'NNS' ]
];

let array2 = [ 
  ['RB', 'adjective'],
  ['NNS', 'noun'],
  ['VB', 'verb'],
];

let array3 = [];

array1.forEach(el => 
{
    array2.forEach(par =>
  {
    if (el[1] === par[0])
    {
        array3.push([el[0], par[1]])
    }
  })
});
console.log(array3);
您可以使用
map()。此代码将每个标记单词中的第二项更改为该标记字典中列出的内容

let taggedWords=[
[‘仅限利息’、‘RB’],
['deals','NNS'],
['allow','VB'],
[‘仅限’、‘RB’],
['结束','NNS']
];
让dict=[
['RB','形容词'],
['NNS','名词'],
['VB','动词']
];
让result=taggedWords.map(tag=>{
标记[1]=dict.find(项=>项[0]==标记[1])[1];
返回标签;
});
控制台日志(结果)您可以使用
map()
创建一个新数组,其中包含原始数组中修改过的元素。此代码将每个标记单词中的第二项更改为该标记字典中列出的内容

let taggedWords=[
[‘仅限利息’、‘RB’],
['deals','NNS'],
['allow','VB'],
[‘仅限’、‘RB’],
['结束','NNS']
];
让dict=[
['RB','形容词'],
['NNS','名词'],
['VB','动词']
];
让result=taggedWords.map(tag=>{
标记[1]=dict.find(项=>项[0]==标记[1])[1];
返回标签;
});

控制台日志(结果)
你能发布一个这样我们可以更容易地编辑吗?@LuisGonzalez不需要,所以有一个本地代码片段编辑器,比外部站点更可取。你能发布一个这样我们可以更容易地编辑吗?@LuisGonzalez不需要,因此有一个本地代码片段编辑器,它比外部站点更可取。这确实有效,但只有当映射在对象中时才有效。OP有一个数组,所以除非他能够改变映射的定义方式,否则这不是一个精确的解决方案。我对此表示怀疑,但我认为问题是使用什么结构来转换基本数组(因为“想”和“然后能够”)。请随意发布带有数组的解决方案!您好-我可以控制映射的定义方式。我已经测试了您的方法@romph,它确实有效-非常感谢。@romph您介意也发布非ES6版本,以便我更好地了解您的解决方案中的情况吗?
var I;对于(i=0;i
taggedWords[i][1]是数组中每行的第二列(“RB,NNS…”),而dico[taggedWords[i][1]]相当于dico[“NNS”],它给你“名词”,然后你把它放在你使用的行的列中。这确实有效,但仅当映射位于对象中时。OP有一个数组,所以除非他能够改变映射的定义方式,否则这不是一个精确的解决方案。我对此表示怀疑,但我认为问题是使用什么结构来转换基本数组(因为“想”和“然后能够”)。请随意发布带有数组的解决方案!您好-我可以控制映射的定义方式。我已经测试了您的方法@romph,它确实有效-非常感谢。@romph您介意也发布非ES6版本,以便我更好地了解您的解决方案中的情况吗?
var I;对于(i=0;i
taggedWords[i][1]是数组中每一行的第二列(“RB,NNS…”),而dico[taggedWords[i][1]]相当于dico[“NNS”],它给你“名词”,然后你把它放在你使用的行的列中。