JS检查一个数组是否embedded到另一个数组中

我有一个二维的JS数组,其中一些行是无用的,需要删除; 特别是我需要删除embedded在其他行中的行(通过说B行embedded行AI意味着不仅仅是A是B的超集,而是A包含B中的所有元素,依次和相同的顺序)

EX。 我有:

var matrix = [ ["User","Shop","Offer","Product","File"], ["User","Shop","File"], ["User","Shop","Map"], ["User","Shop","Promotion"], ["User","Shop","Offer","Product","Reservation"], ["User","Group","Accesslevel"], ["User","Group"], ["User","Reservation"], ["User","Shop"], ["User","Shop","Offer","Product","Markers"] ]; 

在这个例子中,第二行([“用户”,“商店”,“文件”))不应该被删除(它的所有元素都在第一行,但不是连续的)。

第6行([“User”,“Group”,“Accesslevel”])和第9行([“User”,“Group” ]),因为embedded了许多其他..

我正在寻找一种可能的有效algorithm来检查一个数组是否embedded到另一个数组中; 我将在nodejs中使用它。

这应该做的伎俩。

 // Is row2 "embedded" in row1? function embedded(row1, row2) { return row2.length < row1.length && row2.every(function(elt, i) { return elt === row1[i]; }); } //filter out rows in matrix which are "embedded" in other rows matrix.filter(function(row) { return !matrix.some(function(row2) { return embedded(row2, row); }); }); 

这是我前几天为了同样的目的而在客户端使用的解决scheme,这也可以在节点服务器上工作。 http://jsfiddle.net/8wLst3qr/我已经根据你的需要改变了程序&#xFF0C;

我在这里做的是,

一些初始化,

 var matrix = [ ["User","Shop","Offer","Product","File"], ["User","Shop","File"], ["User","Shop","Map"], ["User","Shop","Promotion"], ["User","Shop","Offer","Product","Reservation"], ["User","Group","Accesslevel"], ["User","Group"], ["User","Reservation"], ["User","Shop"], ["User","Shop","Offer","Product","Markers"] ]; var tempArr=matrix; 

这里是步骤

  1. 将数组数组转换为一个string数组(这是因为只有当数据的顺序相同时才需要清除冗余数据),代码如下所示。
 var json=[]; for(k=0;k<tempArr.length;k++) { json[k]=tempArr[k].toString(); } 
  1. 然后匹配数组中其他string中每个string的索引,如果匹配,则检查长度较小的string并将其删除。
 for(k=0;k<json.length;k++) { for(l=0;l<json.length;l++) { console.log("val l="+json[l]+"val k="+json[k]+"value="+json[l].indexOf(json[k])); console.log("k="+k+";l="+l); if(k!=l && (json[k].indexOf(json[l]) !=-1)) { console.log("removing"); console.log("removing"); if(json[k].length>json[l].length) { json.splice(l, 1); } else { json.splice(k, 1); } } } } 

希望能帮助到你,

编辑 – 抱歉,你需要检查console.log输出小提琴