JavaScript如何从数组中删除每个第三个元素

7
如何从数组中删除每个第三个元素?
var TheArray = ['h', 'e', 'z', 'l', 'l', 'l', 'o']

如何在不创建新数组的情况下使其显示“hello”?

只是为了让您知道,在这种情况下创建一个新数组会快大约20倍,即 newArray = []; for (i = 0; i <= TheArray.length; i += 3) newArray.push(TheArray[i]) && newArray.push(TheArray[i+1]); - Andrej Burcev
jsfiddle: https://jsfiddle.net/yexqr68z/1/ - Andrej Burcev
4个回答

10

试一试:

for (var i = 2; i <= TheArray.length; i += 2)
    TheArray.splice(i, 1);
如果您想得到一个字符串,只需使用TheArray.join("")

非常感谢,你帮了我很多! :) - Curiously
@user2033351 不用谢。请记住,一些数组方法(如splicesortpush)会修改数组,而其他方法(如sliceconcatmapfilter)则不会。 - MaxArt

2

另一种方法是使用Array.prototype.filter()函数。以下是使用它删除每个第三个元素的方法:

var TheArray = ['h', 'e', 'z', 'l', 'l', 'l', 'o']
TheArray = TheArray.filter(function(d, i){ return (i+1)%3 !== 0; })

希望它有所帮助。

这是现在更好的方法。甚至可以使用箭头函数更短: TheArray = TheArray.filter((d, i) => (i + 1) % 3) - Shiva Prasad

0
如果你想要一个字符串,不要改变数组。
var r = '';
for (var i=0; i<TheArray.length; i++) {
   if (i%3!=2) r += TheArray[i];
}
// now r is "hello"

0

试试这个:

var arr = ['h', 'e', 'z', 'l', 'l', 'l', 'o'];
for(var i = 2; i < arr.length; i+=2)
    arr.splice(i, 1);
console.log(arr); // outputs ['h','e','l','l','o']

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接