我正在使用splice从数组中删除元素,但它不起作用。 据我所知,代码看起来没问题,但也许我错过了/监督某些事情。 请看一下。这里'州'是一个包含对象的数组。
let removeFromState = state;
for(var i=0;i<removeFromState.length;i++){
if(removeFromState[i].index===action.index){
removeFromState.splice[i,1];
}
}
return removeFromState;
我无法相信,我真是太傻了。 我已经看了很长一段时间,但没有在我面前看到它。但我很高兴我把它发布在这里,因为关于缺少参赛作品的评论,因为我正在增加&#39;我&#39;即使我正在删除条目。
答案 0 :(得分:6)
有两个问题:
一个拼写错误,您正在使用[i,1]
(方括号),您应该使用(i,1)
(括号)。方括号是属性访问器。 (这不是语法错误的原因是JavaScript有一个逗号运算符,[i,1]
计算结果为[1]
。它不是运行时错误的原因是{{{ 1}}在函数上查找属性functionname[1]
- 然后忽略它找到的任何值。)
您的循环将在删除条目后跳过条目,因为您删除条目和增加"1"
。因此,当您删除条目#5时,条目#6将变为#5 - 但随后您将继续i
。所以你永远不要看新的条目#5。
修复#2,如果不删除条目,则只增加i == 6
,或者向后循环。
所以:
i
或
var i = 0;
while (i < removeFromState.length) {
if(removeFromState[i].index === action.index) {
removeFromState.splice(i, 1);
} else {
++i;
}
}
或者,创建一个 new 数组,其中只包含您要保留的条目:
for (var i = removeFromState.length - 1; i >= 0; --i) {
if(removeFromState[i].index === action.index) {
removeFromState.splice(i, 1);
}
}
答案 1 :(得分:2)
splice
是一种方法,用括号括起来,而不是方括号。方括号用于索引(当您“索引”方法时,JavaScript只是过度放松并静默返回undefined
。尝试:
removeFromState.splice(i, 1);
答案 2 :(得分:1)
错误是:你使用方括号而不是括号
function remove(state, action) {
let removeFromState = state;
for (var i = 0; i < removeFromState.length; i++) {
if (removeFromState[i].index === action.index) {
removeFromState.splice(i, 1);
i--; // After deleting, counter reduced
}
}
return removeFromState;
}
console.log(remove([{index: 3}, {index: 3}, {index: 3}], {index: 3}));
答案 3 :(得分:1)
我被这个问题困扰了几个小时。我确实发现当你拼接一个数组时,它确实返回了从原始数组拼接的元素。
let originalArray = ["Apples","Oranges","Kiwi"];
let newArray = originalArray.splice(0,1);
console.log(newArray);
我期望在 spliced 变量中修改 originalArray 但它返回被拼接的元素。 答案是
console.log(originalArray);
无论 splice 返回什么,我们可能不需要它,我们需要检查我们的 originalArray,因为它是被切片的那个。 原始数组包含我预期的答案,即 ["Oranges","Kiwi"]
答案 4 :(得分:0)
问题是你如何调用splice
,它是一个函数,需要调用splice(i, 1)
您可以简化以下功能
let removeFromState = state;
const findEntry = entry => entry.index === action.index;
removeFromState.splice(removeFromState.findIndex(findEntry), 1);
return removeFromState;