Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.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_Arrays_Loops_Iterable - Fatal编程技术网

Javascript 当另一个数组有数字(值)时,如何匹配两个数组的字符串值

Javascript 当另一个数组有数字(值)时,如何匹配两个数组的字符串值,javascript,arrays,loops,iterable,Javascript,Arrays,Loops,Iterable,我是Javascript新手。我试图得到数组(arr1)的Math.max(…arr1[I][1]),只有当它与第二个数组(arr2)匹配时。然后,将其推到数组(arr3)上,结果应该没有重复的值 我尝试迭代这两个数组(arr1和arr2),然后使用“if语句”来匹配它们 var arr1 = [ [ 'abandon', -2 ], [ 'abandon', 1 ], [ 'abandon', -2 ], [ 'abduct', 1 ], [ 'abduct', -2 ], [ 'abduct

我是Javascript新手。我试图得到数组(arr1)的Math.max(…arr1[I][1]),只有当它与第二个数组(arr2)匹配时。然后,将其推到数组(arr3)上,结果应该没有重复的值

我尝试迭代这两个数组(arr1和arr2),然后使用“if语句”来匹配它们

var arr1 = [ [ 'abandon', -2 ],
[ 'abandon', 1 ],
[ 'abandon', -2 ],
[ 'abduct', 1 ],
[ 'abduct', -2 ],
[ 'abduct', -2 ],
[ 'abhor', -3 ],
[ 'abhor', 1 ],
[ 'abhor', -1 ],
[ 'abil', 2 ],
[ 'abil', 4 ] ];


var arr2 = [ [ 'abandon' ],
[ 'abil' ],
[ 'abhor' ],
[ 'abduct' ],
['test'],
['hey'],
['testAgain'],
['array']];

var arr3 = [];

const mapping = arr2.map(word => {
    return word
})

for(var i = 0; i < arr1.length; i++){

    if(arr1[i][0] === mapping){
        arr3.push(Math.max(...arr1[i][1]))
    }

}
let arr4 = [...new Set(arr3)]

//example result:

var arr4 = [[abandon, -2],
[abduct, -2],
[abhor, -3],
[abil, 4]... and so on]
var arr1=[['放弃',-2],
[‘放弃’,1],
[‘放弃’,-2],
[‘绑架’,1],
[‘绑架’,-2],
[‘绑架’,-2],
[‘憎恶’,-3],
[‘憎恶’,1],
[‘憎恶’,-1],
['abil',2],
['abil',4]];
var arr2=[['放弃'],
['abil'],
[“憎恶”],
[“绑架”],
[“测试”],
[嘿],
[“测试增益”],
['array']];
var arr3=[];
常量映射=arr2.map(word=>{
回信
})
对于(变量i=0;i

我知道我做错了什么,我别无选择。需要帮助。

您可以更好地使用
集合
而不是像
arr2
这样的数组直接查找匹配项,因为在
集合
的情况下,这将是恒定时间查找

然后使用
Array.prototype.filter
对数组
arr1
进行过滤,并获取那些位于
arr2
中的数组

最后,
Array.prototype.reduce
将帮助您创建一个对象,其中键为单词,值为
arr1
中该单词的最大值,您可以使用
对象。从
reduce
返回的该对象的条目
以二维数组的形式获取数据:

var arr1=[['放弃',-2],
[‘放弃’,1],
[‘放弃’,-2],
[‘绑架’,1],
[‘绑架’,-2],
[‘绑架’,-2],
[‘憎恶’,-3],
[‘憎恶’,1],
[‘憎恶’,-1],
['abil',2],
['abil',4]];
var arr2=[['放弃'],
['abil'],
[“憎恶”],
[“绑架”],
[“测试”],
[嘿],
[“测试增益”],
['array']];
var lookup=新集合(arr2.flat());
var-mapping=arr1.filter(([word,val])=>lookup.has(word));
var数据=Object.entries(映射.reduce((acc,o,i)=>{
如果(acc[o[0]]){
acc[o[0]]=数学最大值(o[1],acc[o[0]]);
}否则{
acc[o[0]]=o[1];
}
返回acc;
},{}));

控制台日志(数据)我会尽可能少地使用循环

var arr1=[[“放弃”、-2]、“放弃”、“放弃”、-2]、“诱拐”、-2]、“诱拐”、-2]、“憎恶”、-3]、“憎恶”、-1]、“憎恶”、-1]、“阿比尔”、-2]、“阿比尔”、-4];
变量arr2=['放弃'],['能力'],['厌恶'],['绑架'],['测试'],['嘿'],['测试增益'],['阵列'];
函数getHighestResults(dataArr、filterArr){
var name='';//在代码中具有更高的可读性,并在外部创建
var number=-1;//用于循环,以避免在循环中创建变量
函数existsInObject(对象,名称){
返回对象hasOwnProperty(名称);
}
功能过滤器底座(arr,obj){
var filteredar=[];
for(设i=0;ilog(getHighestResults(arr1,arr2))
您的
arr2.map
对于映射变量没有意义,您知道map函数的作用吗?@Nard Pascua我认为预期的输出是错误的,因为
放弃
-2,1,-2
,其中
1
是最大的。因此,请重新检查您的预期输出。非常感谢!稍后我会试试。我试着在浏览器上运行,这确实有效!然而,我正在为这个家庭作业准备一个nodeJS,而“.flat()”和“.has”似乎不适合我的nodeJS。但是,我碰巧为“.flat()”找到了另一种方法。所以,我现在唯一的问题是如何重构“映射”。我试过“hasOwnProperty”和“includes”,但它们不起作用。请告知。提前感谢!:)@LockandLock请查看代码中的编辑和注释,以了解使用数组的替代解决方案。