如何搜索数组数组,并与第一个元素进行比较
How can I search an array of arrays comparing against each first element?
使用香草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]
相关文章:
- JavaScript数组包含一个值
- 使用事件更改数组的一个元素
- 从 javascript 数组创建一个 Jquery 数组
- 使用javascript匹配字符串中数组的一个元素
- Angular2从数组创建一个列表
- 在Javascript数组或一个对象中存储多个数据所需的Tweak
- 你能给被劫持的JavaScript数组添加一个函数吗
- 从带有循环的数组中一个接一个地在画布上绘制形状
- 将图像数组从一个窗口传递到另一个窗口,并在javascript的新窗口中显示图像
- 使用拆分字符串的数组创建一个对象
- 多维数组 - 创建一个表
- Javascript使用map从一维数组创建一个二维数组
- 角度范围变量中的数组只有一个成员
- 将数组从一个函数传递到另一个函数
- 将 php 数组发送到 jquery ajax 并从该数组创建一个 each 循环
- 角度.js:如何更新数组的一个项目
- 数组最后一个单元格中不需要的对象
- Setter 函数用于动态访问数组中的字段,该数组是一个属性
- jQuery从数组扩展一个json元素
- 从两个常规数组创建一个关联数组