如何搜索数组数组,并与第一个元素进行比较

How can I search an array of arrays comparing against each first element?

本文关键字:数组 第一个 元素 比较 何搜索 搜索      更新时间:2023-09-26

使用香草JavaScript或Lodash,如何搜索数组数组,并与每个子数组的第一个元素进行比较,然后返回匹配数组的第二个元素?

例如,如果我有一个这样的数组数组:

[['22','222'], ['23','223'], ['24','224']]

我有一个我想搜索的第一个元素的数组:

['22','23','24'] 

对于第一个元素数组中的每个元素,我想从原始数组中找到与其匹配的第二个元素(分别为'222'、'223'或'224')。

我从API获取这些数据,因此无法更改格式。

这是一个纯Javascript的解决方案,具有一个使用Array.prototype.some()的函数。

some()方法测试数组中的某个元素是否通过了所提供函数实现的测试。

var array = [['22', '222'], ['23', '223'], ['24', '224']];
function getValue(v) {
    var r;
    array.some(function (a) {
        if (a[0] === v) {
            r = a[1];
            return true;
        }
    });
    return r;
}
document.write(getValue(0) + '<br>'); // undefined
document.write(getValue('23'));       // '223'

试试这个

var condition = ['22', '23', '24'];
var data = [
  ['22','222'], 
  ['23','223'], 
  ['24','224'],
  ['25','225'],
  ['26','226']
];
var result = data.filter(function (el) {
  return condition.indexOf(el[0]) >= 0;
}).map(function (el) {
  return el[1];
});
console.log(result);

不确定你需要搜索这个"矩阵"多少次,但如果你需要多次搜索,我认为你应该自己调整格式,这样:

var arr = [['22','222'], ['23','223'], ['24','224']];
var dict = {};
for (var i = 0; i < arr.length; i++) {
    dict[arr[i][0]] = arr[i][1];
}

由于这种格式更改操作,一次搜索可能会让你付出代价,而且在你这样做之后,你将要进行的任何检索都将是有效的。

遍历数组检查,查看当前数组项的第一个元素是否与搜索项相同,如果找到匹配项,则返回第二个元素。

这只会返回找到的第一个匹配元素(如果没有找到匹配,则返回未定义的元素),但这似乎正是您想要的,如果是这样,这比大多数其他答案都要高效得多。

var arr = [['22','222'], ['23','223'], ['24','224']];
function search(arr, term) {
    for(var i in arr) if(arr[i][0] === term) return arr[i][1];
}
// For demo purposes only
function demo(key) { document.write(key + ' => ' + search(arr, key) + '<br>'); }           
var find = ['22','23','24','25'];
for(var i in find) demo(find[i]);

JavaScript解决方案:

var array = [['22', '222'], ['23', '223'], ['24', '224']];
var result;
for (let i = 0; i < array.length; ++i) {
    if (array[i][0] == '23') { // compare the first element with '23'
        result = array[i][1]; // the second element
        break;
    }
}
// Demo
if(typeof result !== 'undefined') { // result was found
    document.writeln(result)
}

如果可用,Array#find使其变得简单:

arr.find(sub => sub[0]==='23')[1]

处理未找到(将返回未定义)的情况:

(arr.find(sub => sub[0] === '23') || []) [1]