当另一个数组具有数字(值)时如何匹配2个数组的字符串值

问题描述 投票:0回答:1

我是Java语言的新手。我试图获取array(arr1)的Math.max(... arr1 [i] [1]),仅当它与第二个array(arr2)匹配时。然后,将其推入array(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]

我知道我做错了,我已经无法选择了。需要帮助。

javascript arrays loops iterable
1个回答
0
投票

您最好直接使用Set而不是像arr2这样的数组来查找匹配项,因为在Set的情况下它将是恒定时间查找。

然后使用Array.prototype.filter过滤数组arr1并获得arr2中的那些数组。

最后Array.prototype.reduce将帮助您创建一个对象,其中键是单词,而值是arr1中该单词的最大值:

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 lookup = new Set(arr2.flat());
var mapping = arr1.filter(([word, val]) => lookup.has(word));
var data = Object.entries(mapping.reduce((acc, o, i) => {
    if(acc[o[0]]){
        acc[o[0]] = Math.max(o[1], acc[o[0]]);
    }else{
        acc[o[0]] = o[1];
    }
    return acc;
},{}));

console.log(data);
© www.soinside.com 2019 - 2024. All rights reserved.