我已经在StackOverflow上阅读了几个关于此的问题,甚至找到了一些解决方案,但它们似乎都做了同样奇怪的事情:
我有一个包含8个名字的数组(数组A):
arrayA= ["person1", "person2", "person3", "person4", "person5", "person6", "person7", "person8"];
我有一个名字的数组(数组B):
arrayB= ["person1"];
现在,我想从阵列A中删除阵列B中不的所有名称。
所以我写了一个小函数,它循环遍历数组A中的所有项,并检查它们是否出现在数组B中。如果没有,我将它们从数组A中删除。
所以我找了一个从数组中删除字符串的函数(在PHP中,这更容易......),我找到了几个方法,这些方法都给了我完全相同的问题。在下面的例子中,我选择了最干净的方法,使用jquery' $ .grep:
arrayA= ["person1", "person2", "person3", "person4", "person5", "person6", "person7", "person8"];
arrayB= ["person1"];
for (var i = 0, len = arrayA.length; i < len; i++) {
if($.inArray(arrayA[i], arrayB) == -1){
var removeName= arrayA[i];
console.log('Removing row of: ' + removeName);
/*
$('tr[player=\'' + removeName + '\']').find('td')
.wrapInner('<div style="display: block;" />')
.parent()
.find('td > div')
.slideUp(700, function(){
$(this).parent().parent().remove();
});
*/
arrayA= $.grep(arrayA, function(value) {
return value != removeName;
});
console.log('arrayA now consists of: ' + arrayA);
}
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
正如您所看到的,它只会删除&#34;偶数&#34;来自arrayA的项目,即&#34; person2&#34;,&#34; person4&#34;,&#34; person6&#34;和&#34; person8&#34;。
如果我多次执行此功能,第二次只删除&#34;偶数&#34;项目(现在是&#34; person3&#34;&#34; person7&#34;),第三次,它删除了#person; person5&#34; (最终)...
有人可以告诉我,我没有看到什么吗? 您可以从控制台日志中看到,第一次运行它时,所有&#34; odd&#34;数组中的项目(即person3,person5和person7)是&#34; undefined&#34; ...
答案 0 :(得分:2)
您可以使用do..while
循环,Array.prototype.splice()
从数组中删除元素
arrayA= ["vincent"
, "Rumpelstilzchen"
, "LuckeR"
, "Nordland"
, "Siegfried"
, "NeKrone"
, "Carnage"
, "tom59fr"];
arrayB= ["vincent"];
var i = 0;
do {
if (arrayB[0] !== arrayA[i]) {
arrayA.splice(i, 1);
} else {
++i;
}
} while (i < arrayA.length);
delete i;
console.log(arrayA, arrayB);
&#13;
答案 1 :(得分:1)
这是因为当你这样称呼时:
arrayA= $.grep(arrayA, function(value) {
return value != removeName;
});
arrayA的长度发生变化,因此arrayA[k]
将移动到arrayA[k-1]
的位置(当k> i时)。
因此,我们最好创建一个新数组来存储过滤后的项目,并在迭代后,将其值赋予arrayA。
arrayA= ["person1", "person2", "person3", "person4", "person5", "person6", "person7", "person8"];
arrayB= ["person1","person4"];
var arrayC=[];
for (var i = 0, len = arrayA.length; i < len; i++) {
console.log('inArray:'+$.inArray(arrayA[i], arrayB))
if($.inArray(arrayA[i], arrayB) != -1){
arrayC.push(arrayA[i]);
}
console.log('arrayC now consists of: ' + arrayC);
}
arrayA=arrayC;
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;