Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在forEach循环中从数组中删除元素?_Javascript_Foreach - Fatal编程技术网

Javascript 如何在forEach循环中从数组中删除元素?

Javascript 如何在forEach循环中从数组中删除元素?,javascript,foreach,Javascript,Foreach,我试图在forEach循环中删除数组中的一个元素,但在我看到的标准解决方案中遇到了问题 这就是我目前正在尝试的: review.forEach(function(p){ if(p === '\u2022 \u2022 \u2022'){ console.log('YippeeeE!!!!!!!!!!!!!!!!') review.splice(p, 1); } }); 我知道它进入了如果,因为我看到了yippeeeee 我的问题:我知道我的for循环和if逻

我试图在
forEach
循环中删除数组中的一个元素,但在我看到的标准解决方案中遇到了问题

这就是我目前正在尝试的:

review.forEach(function(p){
   if(p === '\u2022 \u2022 \u2022'){
      console.log('YippeeeE!!!!!!!!!!!!!!!!')
      review.splice(p, 1);
   }
});
我知道它进入了
如果
,因为我看到了
yippeeeee

我的问题:我知道我的for循环和if逻辑是正确的,但是我试图从数组中删除当前元素的尝试失败了

更新:

尝试了Xotic750的答案,但元素仍然没有被删除:

以下是我的代码中的函数:

review.forEach(function (item, index, object) {
    if (item === '\u2022 \u2022 \u2022') {
       console.log('YippeeeE!!!!!!!!!!!!!!!!')
       object.splice(index, 1);
    }
    console.log('[' + item + ']');
});
以下是尚未删除阵列的输出:

[Scott McNeil]
[reviewed 4 months ago]
[ Mitsubishi is AMAZING!!!]
YippeeeE!!!!!!!!!!!!!!!!
[• • •]

因此,很明显,它是按照指示进入if语句的,但也很明显,[•••]仍然存在。

以下是您应该如何操作:

review.forEach(function(p,index,object){
   if(review[index] === '\u2022 \u2022 \u2022'){
      console.log('YippeeeE!!!!!!!!!!!!!!!!')
      review.splice(index, 1);
   }
});

您也可以使用indexOf来代替

var i = review.indexOf('\u2022 \u2022 \u2022');
if (i !== -1) review.splice(i,1);

看起来你想这么做

使用
var pre=document.getElementById('out');
函数日志(结果){
pre.appendChild(document.createTextNode(result+'\n'));
}
var review=['a','b','c','b','a'];
review.forEach(功能(项、索引、对象){
如果(项目=='a'){
对象。拼接(索引,1);
}
});
日志(审查)

使用
Array.prototype.filter
而不是
forEach

var pre = document.getElementById('out');

function log(result) {
  pre.appendChild(document.createTextNode(result + '\n'));
}

var review = ['a', 'b', 'c', 'b', 'a', 'e'];
review = review.filter(item => item !== 'a');
log(review);

以下内容将为您提供与您的特殊字符不相等的所有元素

review = jQuery.grep( review, function ( value ) {
    return ( value !== '\u2022 \u2022 \u2022' );
} );

我知道您希望使用一个条件从数组中删除项,并使用另一个数组从数组中删除项。是吗

这个怎么样

var review=['a','b','c','ab','bc'];
var筛选=[];
对于(变量i=0;i虽然有时提供了一些优点和可能的解决方案

您知道被迭代的数组在迭代本身中发生了变化(即删除一个项=>索引更改),因此最简单的逻辑是在旧式的
for
(类似于C语言):

让arr=['a','a','b','c','b','a','a'];
for(设i=arr.length-1;i>=0;i--){
如果(arr[i]=“a”){
阵列拼接(i,1);
}
}

document.body.append(arr.join())
您使用forEach的原因是什么?如果要删除项,最合适的功能是。如果需要保留对原始数组的引用,则不需要。是的,我们希望保留对原始数组的引用。您的问题不清楚,您遇到的实际问题是什么?你能举个例子吗,也许是一个JSFIDLE?似乎您应该使用
索引
属性,而不是
来进行
拼接
@Xotic750抱歉,补充说明。我认为情况并非如此。我更改了代码,假设p是一个索引,现在它甚至没有进入
if
语句中。@whocare你应该看看规范回调函数参数是
item,index,object
,谢谢你的回答。我尝试使用您的解决方案,但它仍然无法从数组中删除元素。我将在问题中列出细节forEach
后面加上code>,就像在我的示例中一样。小心,如果要删除两个连续的元素,这会中断:var review=['a','a','c','b','a'];将产生[a',c',b']注释-这个答案是错误的!foreach按索引遍历数组。一旦在迭代时删除元素,以下项目的索引就会发生更改。在本例中,删除第一个“a”后,索引号1现在变为“c”。因此,甚至没有对第一个“b”进行评估。因为您没有尝试删除它,所以它正好可以,但不是这样。您应该遍历数组的反向副本,然后删除原始数组中的项。@Xotic750-原始答案(现在是第一个代码段)是错误的,原因很简单,正如我在前面的注释中解释的,forEach不会遍历数组中的所有元素。我知道问题是如何删除forEach循环中的元素,但简单的答案是您不需要这样做。由于许多人都在阅读这些答案,而且很多时候都是盲目地抄袭答案(尤其是公认的答案),因此注意代码中的缺陷是很重要的。我认为反向while循环是最简单、最有效和最可读的解决方案,应该是公认的答案