【发布时间】:2016-07-17 02:13:46
【问题描述】:
var arr = ['apples','oranges','pears','grapes'];
for (var i=0; i<arr.length; i++) {
if (arr[i] == 'pears') {
arr.splice(i,0,'limes');
}
}
当我尝试在 jsfiddle 中运行它时,页面会冻结。如果我使用特定索引代替 i (arr.splice(2,0,'limes')) 或尝试删除项目 (arr.splice(2,1)),jsfiddle 也会冻结。如果我在没有 for 循环的情况下执行此操作,而是选择一个特定的索引,它将起作用。这里有什么问题?有什么方法可以在 for 循环中使拼接工作(用于添加,而不是删除项目)?
此外,当我在此代码中使用 FreeCodeCamp 的编辑器时,它不会冻结,但它会返回原始数组,就好像从未在其上使用过 splice。但是,如果我为它分配一个变量(var rem = arr.splice(i,1) 在 for 循环中),它会返回已删除的项,而不会实际修改数组本身(数组保持完全相同)。
【问题讨论】:
-
数组原型中有
splice的自定义函数吗? -
arr.splice(i++, 0, 'limes');i 这样当匹配的项目被推进时,循环的下一次迭代就不会遇到它。 -
试试:
arr.splice(arr.indexOf('pears'), 0, 'limes');
标签: javascript arrays splice