我遇到了SwityJson问题并删除了一个数组元素
对于进一步的数据处理,我必须删除一些元素。
这里是我的代码
self.jsonObj = JSON(value)
//Filtern
for i in 0 ..< self.jsonObj["customer"].count {
if self.jsonObj["customer"][i]["Group_A"].string == "Mr Abcde"
|| self.jsonObj["customer"][i]["Group_A"].string == "Mr Bcde"
|| self.jsonObj["custome"][i]["Group_B"].string == "Mr Abcde"
|| self.jsonObj["customer"][i]["Group_B"].string == "Mr Bcde"
{
self.jsonObj["customer"].arrayObject?.removeAtIndex(i)
}
}
现在问题:如果运行代码,则不会删除所有找到的元素。 我认为循环遍历所有元素太快了。有没有删除任务的时间?! 我该怎么办呢循环......找到了一些东西......停止循环...删除项目...开始循环..
通过将If语句设为三次,一切都很好,所有找到的元素都被删除了,但是,嘿,这不是我想要的。
或者可以过滤数组然后说
filterdData = jsonObj
答案 0 :(得分:0)
尝试
//Filtern
for i in 0 ..< self.jsonObj["customer"].count {
let groupA = self.jsonObj["customer"][i]["Group_A"].string
let groupB = self.jsonObj["customer"][i]["Group_B"].string
if groupA == "Mr Abcde" || groupA == "Mr Bcde" || groupB == "Mr Abcde" || groupB == "Mr Bcde"{
self.jsonObj["customer"].rawArray.removeAtIndex(i)
}
}
这不仅对JSON对象的调用较少(可能节省速度),而且还使用rawArray而不是arrayObject,它直接写入数组而不是通过arrayObject到rawArray。
答案 1 :(得分:0)
问题是你正在改变循环中循环的计数。您不需要这样做,可能使用过滤器或相关方法
答案 2 :(得分:0)
我建议在修改之前规范化数据。但如果没有你可以试试这个:
let filteredJson = self.jsonObj["customer"].filter { elem in
!(["Mr Abcde", "Mr Bcde"].contains(elem.["Group_A"].string) ||
["Mr Abcde", "Mr Bcde"].contains(elem.["Group_B"].string))
}
然后使用filteredJson
常量。