从javascript中的数组对象中删除值(jquery)
我试图通过javascript从数组中删除对象。我正在构建一个简单的移动jquery应用程序,希望从数组中删除项。我使用以下代码。我有一个清单,里面有复选框。每个复选框都有一个属于列表项的值。因此,当选中多个复选框时。。它应该从数组中删除所有这些对象(项)从javascript中的数组对象中删除值(jquery),javascript,splice,Javascript,Splice,我试图通过javascript从数组中删除对象。我正在构建一个简单的移动jquery应用程序,希望从数组中删除项。我使用以下代码。我有一个清单,里面有复选框。每个复选框都有一个属于列表项的值。因此,当选中多个复选框时。。它应该从数组中删除所有这些对象(项) function deleteFunction() { objects = getObjects(); $("input:checked").each(function() {
function deleteFunction()
{
objects = getObjects();
$("input:checked").each(function()
{
var inputValue = $(this).val();
for(i = getObjects().length; i >=0; i--)
{
if('{"title":"'+ inputValue + '"}' == JSON.stringify(objects[i]))
{
objects.splice(i, 1);
return true;
}
}
});
alert(JSON.stringify(objects));
window.location.reload();
}
令人讨厌的是:
当我从数组中切片对象时,对象将在第二次迭代中恢复。所以它总是只从数组中删除一个对象
function deleteFunction()
{
objects = getObjects();
$("input:checked").each(function()
{
var inputValue = $(this).val();
for(i = getObjects().length; i >=0; i--)
{
if('{"title":"'+ inputValue + '"}' == JSON.stringify(objects[i]))
{
objects.splice(i, 1);
return true;
}
}
});
alert(JSON.stringify(objects));
window.location.reload();
}
为了测试我的输出,我在if语句中使用了以下代码:
alert(i);
alert(JSON.stringify(objects[i]));
objects.splice(i, 1);
alert(i);
alert(JSON.stringify(objects));
return true;
结果如下
1
{"title":"hi2"}
1
[{"title":"hi1"}, {"title":"hi3"}]
2
{"title":"hi3"}
2
[{"title":"hi1"}, {"title":"hi2"}]
所以我切了hi2,但是已经回来了
谢谢你的回答和回复
解决方案Thanx至depperm+无争议:
function deleteFunction()
{
var objects = getObjects();
$("input:checked").each(function()
{
var inputValue = $(this).val();
for(i = objects.length -1; i >=0; i--)
{
if(objects[i].title == inputValue)
{
objects.splice(i, 1);
}
}
});
localStorage.setItem("objects", JSON.stringify(objects));
window.location.reload();
}
有几件事我会改变,首先是在
for
循环中,无需每次调用getObjects()
只需使用对象即可。然后在if
中,只需检查对象[i].title
是否与输入值相同
function deleteFunction()
{
objects = getObjects();
$("input:checked").each(function()
{
var inputValue = $(this).val();
for(i = objects .length; i >=0; i--)
{
if(objects[i].title==inputValue)
{
objects.splice(i, 1);
}
}
});
alert(JSON.stringify(objects));
window.location.reload();
}
使用.splice()
代替.slice()
slice
根本不改变/操作原始数组,它只是根据您的选择创建另一个数组
拼接
会改变原始阵列
参考:数组方法切片
不会删除数组元素。改用拼接
您的代码存在一些问题:
您有时会错过关键字var
变量i
等于第一次迭代中数组的长度。应该是一减去那个
您可以只比较title属性的值,而不是转换为JSON来比较对象
删除/注释掉return-true语句。我将slice改为splice:D,这几个小时我的代码乱七八糟:Dthanx。。这就是我在主要帖子下面添加的解决方案