Javascript 通过比较多个数组中的单个值来创建新的jQuery数组
关于这一点有很多帖子,但我的JS印章还没有为我的案例找到解决方案 我有两个数组,一个是GoogleLat/Lng变量的硬编码数组(屏幕截图中的Array2),另一个是通过迭代DOM元素构建的数组(屏幕截图中的Array1)。我需要将Array2与从DOM动态创建的Array1进行比较,并仅创建Array1中找到的Array2对象的新Array3。这将是我迭代创建地图标记的数组。下面是我的代码示例 阵列1Javascript 通过比较多个数组中的单个值来创建新的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
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()<