我试图通过javascript从我的数组中删除对象。我正在构建一个简单的移动jquery应用程序,并希望从数组中删除项目。我使用以下代码。我有一个包含复选框的列表。每个复选框都有一个属于列表项的值。因此,当选中多个复选框时,它应该从数组中删除所有这些对象(项)。
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回答并回复
解决方案Thanx to depperm + indubitablee:
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();
}
答案 0 :(得分:0)
我会更改一些内容,首先在for
循环中,每次只使用getObjects()
时无需调用objects
。然后在if
中,只需检查objects[i].title
是否与inputValue
相同。
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();
}
答案 1 :(得分:0)
使用.slice()
代替slice
。
splice
根本不会改变/操纵原始数组,它只是根据您的选择创建另一个数组。
private void start_Button(object sender, RoutedEventArgs e)
{
YourViewModel yourViewModel = (sender as Button).DataContext as YourViewModel ;
if (yourViewModel != null)
{
yourViewModel.ProgressBarValue = <<The value you want to set>>;
}
}
会改变原始数组。
参考:http://www.devcurry.com/2010/12/slice-and-splice-in-javascript.html
答案 2 :(得分:0)
数组方法slice
不会删除数组元素。请改用splice
。
您的代码存在一些问题:
var
。i
等于第一次迭代中数组的长度。它应该是一个减去那个。