解决方案1
您可以向后循环,如下所示:
var searchInput, i;searchInput = ["this", "is", "a", "test"];i = searchInput.length;while (i--) { if (searchInput[i].length < 4) { searchInput.splice(i, 1); }}这是因为在数组上进行增量迭代,当您对其进行拼接时,数组将被修改到位,因此项目被“移位”,最终您将跳过某些迭代。向后循环(使用a
while或什至
for循环)可解决此问题,因为您未按拼接的方向循环。
解决方案2
同时,生成新数组而不是就地修改数组通常更快。这是一个例子:
var searchInput, newSearchInput, i, j, cur;searchInput = ["this", "is", "a", "test"];newSearchInput = [];for (i = 0, j = searchInput.length; i < j; i++) { cur = searchInput[i]; if (cur.length > 3) { newSearchInput.push(cur); }}其中
newSearchInput将仅包含有效长度的项目,而您仍具有中的原始项目
searchInput。
解决方案3
除了上述第二种解决方案,还可以使用类似的更新
Array.prototype方法更好地处理该问题:
filter。这是一个例子:
var searchInput, newSearchInput;searchInput = ["this", "is", "a", "test"];newSearchInput = searchInput.filter(function (value, index, array) { return (value.length > 3);});


