delete использовать неправильно, он просто затирает пунктик.
splice сдвигает хвост массива, и если понадобится удалить много элементов, сложность будет O(N^2)
для линейной сложности такой вариант:
var arr = [1,2,3,4,5,6,7];
for (var p = 0, i = 0, le = arr.length; i < le; ++i) {
if (!(arr[i] > 4)) {
arr[p++] = arr[i];
}
}
arr.length = p;
alert(arr.join(', '));