Как отфильтровать вложенный массив SwiftyJSON
У меня есть SwiftyJSON
массив, который вложен в несколько уровней, и мне нужно отфильтровать массив на основе значения на самом низком уровне. Ниже приведен пример массива. Мне нужно отфильтровать Active == true
, Каков наиболее эффективный способ сделать это?
var colors = JSON([
"Apple" : [
"Yellow" : [
"Active" : true,
"Working" : true,
"Value" : 0
],
"Red" : [
"Active" : false,
"Working" : true,
"Value" : 0
]
],
"Banana" : [
"Blue" : [
"Active" : false,
"Working" : true,
"Value" : 0
],
"Green" : [
"Active" : true,
"Working" : true,
"Value" : 0
]
]
])
Желаемый результат:
"Apple" : [
"Yellow" : [
"Active" : true,
"Working" : true,
"Value" : 0
]
],
"Banana" : [
"Green" : [
"Active" : true,
"Working" : true,
"Value" : 0
]
]
3 ответа
Решение
Проверь это
var filteredArray = [JSON]()
for item in colors {
for subItem in item.1 {
if subItem.1["Active"].boolValue {
filteredArray.append(JSON([item.0:JSON([subItem.0:subItem.1])]))
}
}
}
print(filteredArray)
Выход - массив словарей отфильтрованных под-словарей с активным истиной:
[{
"Apple" : {
"Yellow" : {
"Working" : true,
"Value" : 0,
"Active" : true
}
}
}, {
"Banana" : {
"Green" : {
"Working" : true,
"Value" : 0,
"Active" : true
}
}
}]
var result = [String:[String:JSON]]()
for (key, json) in colors.dictionaryValue {
let filtered = json.dictionaryValue.filter{$0.1["Active"].boolValue}
guard filtered.count > 0 else { continue }
var subDic = [String:JSON]()
filtered.forEach{subDic[$0.0] = $0.1}
result[key] = subDic
}
print(result)
Вы можете создать цикл, который будет читать все цвета, и в этом цикле создать цикл, который будет читать другие элементы во втором массиве. Во втором случае вы проверяете, является ли элемент действительным или нет, и сохраняете его в другом массиве.
let activeItems = []
for item in colors {
for i in item as NSDictionary {
if i.objectForKey("Active") == true {
activeItems.addObject(i)
}
}
}