我很难搞清楚如何循环数组,如果数组中确实存在某些项目,我想执行一个.slice(0,16)来过滤已经存在的数组(让我们称之为现有数组“路由”)。
例如,先前的过程将产生以下数组:
points = ['=00ECY20WA200_RECV_P1SEL',
'=00ECY20WA200_RECV_P2SEL',
'=00RECV_C1A_EINCSCMPP1',
'=00RECV_C1A_EINCSCMPP2',
'=00BYPS_C1A_EINCSCMP',
'=00ECY20WA200_BYPS_SPSL1',
'=00ECC92AG184YB01',
'=00ECC92AG185YB01',
'=00ECC92AG186YB01',
'=00ECC92AG187YB01',
]
因此,如果“points”数组中存在上述任何项目,在这种情况下它们都会存在(但在某些情况下它可能只是现有10个项目中的1个),我正在尝试执行路由.slice(0,16)到另一个已经存在的数组。
我已经尝试了很多不同的方法(对于带有if语句的循环),此时我不确定它是我的语法还是什么,但是我回到了0的方位而且我甚至没有有效的代码片段。任何方向将不胜感激。
答案 0 :(得分:1)
您可以使用哈希表进行检查和过滤。
var points = ['=00ECY20WA200_RECV_P1SEL', '=00ECY20WA200_RECV_P2SEL', '=00RECV_C1A_EINCSCMPP1', '=00RECV_C1A_EINCSCMPP2', '=00BYPS_C1A_EINCSCMP', '=00ECY20WA200_BYPS_SPSL1', '=00ECC92AG184YB01', '=00ECC92AG185YB01', '=00ECC92AG186YB01', '=00ECC92AG187YB01'],
hash = Object.create(null),
filtered = points.filter(function (a) {
if (!hash[a.slice(0, 16)]) {
hash[a.slice(0, 16)] = true;
return true;
}
});
console.log(filtered);
ES6 with Set
var points = ['=00ECY20WA200_RECV_P1SEL', '=00ECY20WA200_RECV_P2SEL', '=00RECV_C1A_EINCSCMPP1', '=00RECV_C1A_EINCSCMPP2', '=00BYPS_C1A_EINCSCMP', '=00ECY20WA200_BYPS_SPSL1', '=00ECC92AG184YB01', '=00ECC92AG185YB01', '=00ECC92AG186YB01', '=00ECC92AG187YB01'],
pSet = new Set,
filtered = points.filter(a => !pSet.has(a.slice(0, 16)) && pSet.add(a.slice(0, 16)));
console.log(filtered);
答案 1 :(得分:1)
编辑:所以看起来你想从点数组中的每个元素中删除一个名为routes的数组中的元素。这就是你如何做到这一点:
function removeBrokenRoutes(brokenPoints, routes){
for(let pt of brokenPoints){
let index = routes.indexOf(pt);
if(index !== -1) routes.splice(index,1);
}
return routes;
}
请记住,数组越大,完成的时间就越长。
答案 2 :(得分:0)
您可以组合使用filter
和indexOf
方法:
var arr = [/* all the data you're checking against */];
var points = [/* the data you're checking for */];
var filteredArr = arr.filter(function(x) {
// will return -1 if the point is not found
return points.indexOf(x) !== -1;
});
filteredArr将包含两个数组中出现的所有点。 filter
函数通过使用带有一个参数x的函数来工作,该函数表示数组中的每个项目。如果函数返回true,则该项将被添加到新数组(filteredArr
),如果为false,则该函数将继续执行下一项。 indexOf
将检查是否在另一个数组中找到该项。另外需要注意的是,如果数据集非常非常大,则需要更复杂的解决方案(例如哈希表),因为这不一定是性能最高的方法。但它很容易理解,因此它是一个很好的起点。