删除数组中的特定元素

时间:2016-07-09 11:44:18

标签: javascript arrays

我需要在数组元素与字符串的其他元素部分匹配时从数组中删除元素,删除该元素。

例如,

var res1 = [
  " Proj -> Phase-1 -> Tower-1 -> Floor-2 ", 
  " Proj -> Phase-2 ", 
  " Proj -> Phase-2 -> Tower-1 " ];

即如果我的

res1[2]="Proj->Phase-2->Tower-1" 

res1[1]="Proj->Phase-2"

res1[1]res1[2]部分匹配。所以我需要删除res1[2]。之后我想要剩下的数组值。但它不能正常工作。

这是我尝试过的,但我没有得到我期望的结果:

for (i = 0; i < res1.length; i++) {
    for (j = 0; j < res1.length; j++) {
        if (res1[i] != res1[j]) {
            if (res1.indexOf(res1[j]) === 0) {
                console.log(res1);
                console.log(res1[j]);
                delete res1[i];
            }
        }
    }
}

,即如果string1“Proj-&gt; Phase-2”恰好在string2“Proj-&gt; Phase-2-&gt; Tower-1”中,则需要删除string2。即使string3“Proj-&gt; Phase-1-&gt; Tower-1”与string1相比,它也不完全相同。所以不应该删除

4 个答案:

答案 0 :(得分:3)

你快到了。只需检查指数是否不相同

96

然后如果一个字符串在另一个

105

然后使用Array#splice删除元素。

虽然foor循环递增1并且外部循环的实际元素被删除,但您需要对索引i !== j 进行更正。然后需要res1[i].indexOf(res1[j]) === 0 // ^^^ ,因为结构已更改,需要使用i初始化新循环。

&#13;
&#13;
break
&#13;
&#13;
&#13;

答案 1 :(得分:2)

使用EcmaScript2015的解决方案:

true.realType();                            //  "Boolean"
var a = 4; a.realType();                    //  "Number"
$('div:first').realType();                   // "jQuery"
document.createElement('div').realType()    //  "HTMLDivElement"

或者没有箭头功能:

var res1 = [
  " Proj -> Phase-1 -> Tower-1 -> Floor-2 ", 
  " Proj -> Phase-2 ", 
  " Proj -> Phase-2 -> Tower-1 " ];

res1 = res1.filter((x, i) => res1.every((y, j) => i==j || x.indexOf(y)));
  
console.log(res1);

答案 2 :(得分:1)

我会使用String.includes()

&#13;
&#13;
var res1 = [
  " Proj -> Phase-1 -> Tower-1 -> Floor-2 ", 
  " Proj -> Phase-2 ", 
  " Proj -> Phase-2 -> Tower-1 " ];    

for (var i = 0; i < res1.length; i++) {
  for (var j = i + 1; j < res1.length; j++) {
    if (res1[j].includes(res1[i])) {
      res1.splice(j, 1);
      j--; // Splice deletes the element so all index shifts, need to recheck the same element
    }
  }
}

console.log(res1)
&#13;
&#13;
&#13;

答案 3 :(得分:1)

我不确定这是否是您需要的结果但是在这里,您必须在if构造中使用的commans是:

res1[j].indexOf(res1[i])==0

所以整个程序是:

for(i in res1){
  for(j in res1){
    if(i!=j){
      if(res1[j].indexOf(res1[i])==0){
       delete res1[j];
      }
    }
  }
}
alert(res1);

希望这会有所帮助:)