Javascript 通过比较多个数组中的单个值来创建新的jQuery数组

Javascript 通过比较多个数组中的单个值来创建新的jQuery数组,javascript,jquery,arrays,Javascript,Jquery,Arrays,关于这一点有很多帖子,但我的JS印章还没有为我的案例找到解决方案 我有两个数组,一个是GoogleLat/Lng变量的硬编码数组(屏幕截图中的Array2),另一个是通过迭代DOM元素构建的数组(屏幕截图中的Array1)。我需要将Array2与从DOM动态创建的Array1进行比较,并仅创建Array1中找到的Array2对象的新Array3。这将是我迭代创建地图标记的数组。下面是我的代码示例 阵列1 var gdata = new Array(); $("table tbody tr:gt

关于这一点有很多帖子,但我的JS印章还没有为我的案例找到解决方案

我有两个数组,一个是GoogleLat/Lng变量的硬编码数组(屏幕截图中的Array2),另一个是通过迭代DOM元素构建的数组(屏幕截图中的Array1)。我需要将Array2与从DOM动态创建的Array1进行比较,并仅创建Array1中找到的Array2对象的新Array3。这将是我迭代创建地图标记的数组。下面是我的代码示例

阵列1

var gdata = new Array();

$("table tbody tr:gt(0)").each(function (i) {
    gdata[i] = new Array();
    $(this).children('td').each(function (ii) {
        gdata[i][ii] = $(this).text();
    });
});
阵列2

var markers = [
    ['a0', 32.840801, -117.244842],
    ['a10', 32.840801, -117.244842],
    ['a20', 32.840777, -117.244864],
    ...
]

我认为您应该使用以下内容:

var results = []; // the results array

for (var i = 0; i < markers.length; i++) // iterate for every marker key
{
   results = results.concat(gdata.filter(function(item) { return item[8] == markers[i][0]; }));
}
var结果=[];//结果数组
for(var i=0;i

在js中,我们可以使用filter方法,以便通过查询语句仅检索给定数组的一部分。。在本例中,我们将每个标记键与整个gdata数组进行比较。。最后,我们将每个标记的相关项关联到目标结果数组

我认为您应该使用以下内容:

var results = []; // the results array

for (var i = 0; i < markers.length; i++) // iterate for every marker key
{
   results = results.concat(gdata.filter(function(item) { return item[8] == markers[i][0]; }));
}
var结果=[];//结果数组
for(var i=0;i

在js中,我们可以使用filter方法,以便通过查询语句仅检索给定数组的一部分。。在本例中,我们将每个标记键与整个gdata数组进行比较。。最后-我们将每个标记的相关项关联到目标结果数组

听起来您想
filter()
静态列表,如果其中有(
some()
)与动态列表匹配:

var标记=[
[a0',32.840801,-117.244842],
[a10',32.840801,-117.244842],
[a20',32.840777,-117.244864]
];
动态变量=[
[a0',32.840801,-117.244842],
[a0zz',32.840801,-117.244842]
];
var found=markers.filter(m=>dynamic.some(d=>d[0]==m[0]);

console.log(已找到)
如果静态列表中有(
some()
)与动态列表匹配,则听起来您希望对静态列表进行过滤(
filter()
):

var标记=[
[a0',32.840801,-117.244842],
[a10',32.840801,-117.244842],
[a20',32.840777,-117.244864]
];
动态变量=[
[a0',32.840801,-117.244842],
[a0zz',32.840801,-117.244842]
];
var found=markers.filter(m=>dynamic.some(d=>d[0]==m[0]);

log(found)
由于您的检查似乎只处理HTML表第一列中的值,因此不需要在
gdata
中读取所有值,只需读取第一列。然后,您可以将第一列中的文本转换为以文本为键的对象,这样可以更快地查找:

var gdata={};
$(“表tbody tr:gt(0)>td:first child”)。每个(函数(){
gdata[$(this).text()]=true;
});
变量标记=[
[a0',32.840801,-117.244842],
[a10',32.840801,-117.244842],
[a20',32.840777,-117.244864],
[c3',32.840777,-117.244864],
];
var array3=markers.filter(函数(行){
返回gdata中的行[0];
});
控制台日志(array3)
td,th{font size:9px;}

标题
b123123
a20123123
a0123123

由于您的检查似乎只处理HTML表第一列中的值,因此不需要在
gdata
中读取所有值,只需读取第一列。然后,您可以将第一列中的文本转换为以文本为键的对象,这样可以更快地查找:

var gdata={};
$(“表tbody tr:gt(0)>td:first child”)。每个(函数(){
gdata[$(this).text()]=true;
});
变量标记=[
[a0',32.840801,-117.244842],
[a10',32.840801,-117.244842],
[a20',32.840777,-117.244864],
[c3',32.840777,-117.244864],
];
var array3=markers.filter(函数(行){
返回gdata中的行[0];
});
控制台日志(array3)
td,th{font size:9px;}

标题
b123123
a20123123
a0123123

请添加一些解释,说明此代码为何有助于OP。这将有助于提供未来观众可以从中学习的答案。有关更多信息,请参阅。请添加一些解释,说明此代码为何有助于OP。这将有助于提供未来观众可以从中学习的答案。有关更多信息,请参阅。匹配应与Array1第一列中的文本或任何列中的值匹配?你是否需要数组1用于其他目的,或者我们可以提出另一种结构?是的,我可以将其移至第1列。不,不,这不是我所要求的。因此,匹配值可以是HTML表中的任意位置,而不仅仅是第1列?@trincot我只关心[0]位置,因为这是我的标记的Lat/Lng数组。两个目标对象现在都位于[0]位置,并且已上载新的屏幕截图。希望这能让它变得更容易。匹配应该是Array1第一列中的文本,还是任何列中的值?你是否需要数组1用于其他目的,或者我们可以提出另一种结构?是的,我可以将其移至第1列。不,不,这不是我所要求的。因此,匹配值可以是HTML表中的任意位置,而不仅仅是第1列?@trincot我只关心[0]位置,因为这是我的标记的Lat/Lng数组。两个目标对象现在都位于[0]位置,并且已上载新的屏幕截图。希望这能让事情变得更简单。好问题。我认为你是对的。
some()<