如果BOOK_COPY_ID
和id
在第0个索引处都相等,则我的整个数组将为空。如果我放回车键,它也会被删除。
这是我的代码:
var i = 0;
while(i < bookLoop.length)
{
if(parseInt(bookLoop[i].BOOK_COPY_ID) == parseInt(id))
{
bookLoop.splice(i);
}
i++;
}
答案 0 :(得分:2)
您缺少splice
的var newArray = bookLoop.filter(function(value){
return parseInt(value.BOOK_COPY_ID) == parseInt(id);
});
参数。否则,它将删除索引之后的所有元素:
deleteCount
在拼接时,您也不应增加bookLoop.splice(i, 1);
,因为您删除了索引:
i
答案 1 :(得分:1)
根据文档:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice
如果不指定第二个参数.getOrThrow(Duration.ofSeconds(10))
,它将删除从当前位置到数组末尾的所有项目。
因此,您的代码应如下所示:
deleteCount
另一种不错的方法是本文中提到的方法之一:https://love2dev.com/blog/javascript-remove-from-array/
var i = 0;
while(i < bookLoop.length)
{
if(parseInt(bookLoop[i].BOOK_COPY_ID) == parseInt(id))
{
bookLoop.splice(i, 1);
} else {
i++;
}
}
答案 2 :(得分:1)
您忘记添加第二个参数(deleteCount)
如果省略deleteCount,或者其值等于或大于 array.length-开始(即,等于或大于 数组中剩余的元素数量(从start开始),然后是所有 从数组开头到结尾的元素将被删除。
详细了解array.splice
var id = "123";
var bookLoop = [
{ BOOK_COPY_ID: "123" },
{ BOOK_COPY_ID: "456" },
{ BOOK_COPY_ID: "789" }
];
var i = 0;
while (i < bookLoop.length) {
if (parseInt(bookLoop[i].BOOK_COPY_ID) == parseInt(id)) {
bookLoop.splice(i, 1);
} else { i++; }
}
console.log(bookLoop);
答案 3 :(得分:1)
while
循环有点笨拙。我会使用Array.prototype.filter()。这是ES6版本。
let new_bookLoop = bookLoop.filter(b => (b.BOOK_COPY_ID) != parseInt(id))
对于E5,您可以使用:
let new_bookLoop = bookLoop.filter(function(b) { return b.BOOK_COPY_ID != parseInt(id); }