Javascript 未从阵列中删除元素的拼接
我正在使用splice从阵列中删除一个元素,但它不起作用。 据我所知,代码看起来不错,但可能我遗漏了/监督了一些东西。 请看一看。这里的“state”是一个包含对象的数组Javascript 未从阵列中删除元素的拼接,javascript,splice,Javascript,Splice,我正在使用splice从阵列中删除一个元素,但它不起作用。 据我所知,代码看起来不错,但可能我遗漏了/监督了一些东西。 请看一看。这里的“state”是一个包含对象的数组 let removeFromState = state; for(var i=0;i<removeFromState.length;i++){ if(removeFromState[i].index===action.index){
let removeFromState = state;
for(var i=0;i<removeFromState.length;i++){
if(removeFromState[i].index===action.index){
removeFromState.splice[i,1];
}
}
return removeFromState;
让removeFromState=state;
对于(var i=0;isplice
是一个方法,您可以用括号而不是方括号来调用它。方括号用于索引(JavaScript只是过于宽松,当您“索引”该方法时,会无声地返回未定义的
)。尝试:
问题在于如何调用splice
,它是一个函数,需要像splice(i,1)
您可以将函数简化如下
let removeFromState = state;
const findEntry = entry => entry.index === action.index;
removeFromState.splice(removeFromState.findIndex(findEntry), 1);
return removeFromState;
有两个问题:
输入错误,您使用的是[i,1]
(方括号),而您应该使用(i,1)
(括号)。方括号是属性访问器。(这不是语法错误的原因是JavaScript有逗号运算符,[i,1]
的计算结果为[1]
。它不是运行时错误的原因是functionname[1]
查找函数的属性“1”
,然后忽略它找到的任何值。)
循环将在删除条目后跳过条目,因为您同时删除了条目并增加了i
。因此,当您删除条目#5时,条目#6将变为#5-但随后将转到i==6
。因此,您永远不会查看新条目#5
要修复#2,如果不删除条目,则只增加i
,或者向后循环
因此,要么:
var i = 0;
while (i < removeFromState.length) {
if(removeFromState[i].index === action.index) {
removeFromState.splice(i, 1);
} else {
++i;
}
}
或者,创建一个仅包含要保留的项的新数组:
var newArray = removeFromState.filter(function(entry) { return entry.index !== action.index; });
错误是:您使用了方括号而不是括号
功能删除(状态、操作){
让removeFromState=状态;
for(var i=0;i log(remove([{index:3},{index:3},{index:3}],{index:3}));
我在这个问题上纠缠了几个小时。我确实发现,当拼接数组时,它会返回从原始数组拼接的元素
let originalArray = ["Apples","Oranges","Kiwi"];
let newArray = originalArray.splice(0,1);
console.log(newArray);
我希望在拼接变量中使用修改后的originalArray,但它返回拼接的元素。
答案是
console.log(originalArray);
无论拼接返回什么,我们可能不需要它,我们需要检查原始阵列,因为它是被切片的。
原始数组由我预期的答案组成,即[“橙子”、“猕猴桃”]使用()
而不是[]
谢谢你的回答。特别是第2点,因为我没有看到它的到来。是的,我可能会丢失条目。所以,用I--而不是I++应该解决这个问题吗?@faraz:我在答案的末尾添加了一些示例。谢谢。非常有用。你不需要while,也不需要复杂的for循环,只要在删除时减少计数器就行了!
let originalArray = ["Apples","Oranges","Kiwi"];
let newArray = originalArray.splice(0,1);
console.log(newArray);
console.log(originalArray);