如何搜索与每个第一个元素进行比较的数组数组?

时间:2015-12-05 16:24:38

标签: javascript lodash

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

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

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

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

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

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

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

6 个答案:

答案 0 :(得分:3)

这是一个简单的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'

答案 1 :(得分:2)

试试这个

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);

答案 2 :(得分:1)

不确定你需要多少次搜索这个&#34;矩阵&#34;,但是如果你不止一次需要这样做,我认为你应该自己调整格式,这样:

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];
}

单个搜索可能会使您花费此格式更改操作,并且在您执行此操作后 - 您要执行的任何检索都将非常有效。

答案 3 :(得分:1)

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

这只会返回找到的第一个匹配元素(如果未找到匹配项,则返回未定义),但似乎这就是您要查找的内容,如果是这样,这比其他大多数答案都要高效。< / p>

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]);

答案 4 :(得分:1)

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

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

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

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

答案 5 :(得分:0)

JavaScript解决方案:

&#13;
&#13;
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)
}
&#13;
&#13;
&#13;