拼接不从数组中删除元素
splice not removing element from array
我正在使用 splice 从数组中删除一个元素,但它不起作用。
据我所知,代码看起来不错,但也许我 missing/overseeing 有点。
请看一下。这里 'state' 是一个包含对象的数组。
let removeFromState = state;
for(var i=0;i<removeFromState.length;i++){
if(removeFromState[i].index===action.index){
removeFromState.splice[i,1];
}
}
return removeFromState;
我不敢相信,我当时太傻了。
我已经看了很长时间了,但没有看到它就在我面前。但我很高兴我把它贴在这里,因为关于缺少条目的评论因为我正在增加 'i' 即使我正在删除条目。
splice
是一个方法,你用括号调用它,而不是方括号。方括号用于索引(JavaScript 只是在您 "index" 方法时过度放松并默默地 returns undefined
)。尝试:
removeFromState.splice(i, 1);
问题是你如何调用 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;
}
}
或
for (var i = removeFromState.length - 1; i >= 0; --i) {
if(removeFromState[i].index === action.index) {
removeFromState.splice(i, 1);
}
}
或者,创建一个 new 数组,只包含您要保留的条目:
var newArray = removeFromState.filter(function(entry) { return entry.index !== action.index; });
Mistake was: you used square brackets instead of parenthesis
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}));
我在这个问题上停留了几个小时。我确实发现当你拼接一个数组时,它会 returns 从原始数组拼接的元素。
let originalArray = ["Apples","Oranges","Kiwi"];
let newArray = originalArray.splice(0,1);
console.log(newArray);
我期待拼接变量中的修改后的 originalArray 但它 returns 拼接的元素。
答案是
console.log(originalArray);
无论拼接什么 returns,我们可能不需要那个,我们需要检查我们的 originalArray,因为它是被切片的那个。
originalArray 包含我的预期答案,即 ["Oranges","Kiwi"]
removeFromState
被实例化为 let 常量,因此不可变。如果 let removeFromState
更改为 var removeFromState
(.
我正在使用 splice 从数组中删除一个元素,但它不起作用。 据我所知,代码看起来不错,但也许我 missing/overseeing 有点。 请看一下。这里 'state' 是一个包含对象的数组。
let removeFromState = state;
for(var i=0;i<removeFromState.length;i++){
if(removeFromState[i].index===action.index){
removeFromState.splice[i,1];
}
}
return removeFromState;
我不敢相信,我当时太傻了。 我已经看了很长时间了,但没有看到它就在我面前。但我很高兴我把它贴在这里,因为关于缺少条目的评论因为我正在增加 'i' 即使我正在删除条目。
splice
是一个方法,你用括号调用它,而不是方括号。方括号用于索引(JavaScript 只是在您 "index" 方法时过度放松并默默地 returns undefined
)。尝试:
removeFromState.splice(i, 1);
问题是你如何调用 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;
}
}
或
for (var i = removeFromState.length - 1; i >= 0; --i) {
if(removeFromState[i].index === action.index) {
removeFromState.splice(i, 1);
}
}
或者,创建一个 new 数组,只包含您要保留的条目:
var newArray = removeFromState.filter(function(entry) { return entry.index !== action.index; });
Mistake was: you used square brackets instead of parenthesis
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}));
我在这个问题上停留了几个小时。我确实发现当你拼接一个数组时,它会 returns 从原始数组拼接的元素。
let originalArray = ["Apples","Oranges","Kiwi"];
let newArray = originalArray.splice(0,1);
console.log(newArray);
我期待拼接变量中的修改后的 originalArray 但它 returns 拼接的元素。 答案是
console.log(originalArray);
无论拼接什么 returns,我们可能不需要那个,我们需要检查我们的 originalArray,因为它是被切片的那个。 originalArray 包含我的预期答案,即 ["Oranges","Kiwi"]
removeFromState
被实例化为 let 常量,因此不可变。如果 let removeFromState
更改为 var removeFromState
(.