Cómo filtrar arrays internos de arreglos multidimensionales

Estoy tratando de extraer variables ( safety_rating_id , score , etc.) de una matriz (llamada array ) basada en submission_id usando el método rápido de safety_rating_id Dollar ( https://github.com/ankurp/Dollar ) para que yo más tarde puede hacer una request POST (Eventualmente, espero poder replace los valores codificados en mi parámetro con las variables de la matriz eliminada) con ellos, pero mis resultados de find all return nil.

Estas son las matrices internas que quiero donde submission_id es 27 de esta matriz https://codeshare.io/zr1pw (líneas 22-36):

 { "submission_id" : "27", "name" : "Equipment", "task_id" : "37", "points" : "10", "safety_rating_id" : 105, "score" : "9" }, { "submission_id" : "27", "name" : "Emergency Equipment", "task_id" : "37", "points" : "10", "safety_rating_id" : 106, "score" : "9" } 

Código:

  var array: [JSON] = [] func submitScore(onCompletion: () -> (), onError: ((NSError) -> ())? = nil) { guard let endPoint = Data.shanetworkingInstance.submitScoreEndpoint else { print("Empty endpoint"); return } let user = Users() let test = $.find(self.array, callback: { $0 == 27 }) print(test) let Auth_header = [ "Authorization" : user.token, ] let parameters: [String:Array<[String:Int]>] = [ "ratings" : [ [ "safety_rating_id" : 105, "schedule_job_id" : 18, "score" : 9, "submission_id" : 27 ], [ "safety_rating_id" : 106, "schedule_job_id" : 18, "score" : 10, "submission_id" : 27 ] ] ] Alamofire.request(.POST, endPoint, headers: Auth_header, parameters: parameters, encoding: .JSON) .validate() .responseJSON { response in switch response.result { case .Success(let data): let json = JSON(data) print(json) onCompletion() case .Failure(let error): print("Request failed with error: \(error)") onError?(error) } } } 

ACTUALIZAR

Puedo get la matriz con submission_id 27 PERO quiero eliminar el name y el task_id de los dos submission_id : 27 arrays Y agregar un schedule_job_id que obtuve de otra parte.

He intentado usar un bucle for in para crear mi propia matriz a partir de las variables que deseo, pero sigo recibiendo un locking nil . Esto es lo que se ve en la nueva matriz https://codeshare.io/3VJSo

para error en el bucle

Finalmente quiero hacer una "ratings" : [chosenArray]

Entonces, lo que pasa dentro de la callback es cada elemento de la matriz, por lo que pasará el object del dictionary. Entonces, si quiere encontrar un elemento específico en la matriz, debe hacer

 let test = $.find(array) { $0["submission_id"]! == "27" } 

Si desea que todos los elementos en la matriz tengan identificación de envío como 27, use el filter

 let test = array.filter { $0["submission_id"]! == "27" } 

Para eliminar properties de un object de dictionary, debe llamar removeValueForKey método removeValueForKey en cada elemento de la matriz.

 let jsonWithMySubmissionId = self.array.filter ({ $0["submission_id"]! == 27 }) for json in jsonWithMySubmissionId { json.removeValueForKey("name") json.removeValueForKey("task_id") ... } 

Su dic en su bucle for debe ser del tipo NSMutableDictionary . Porque no puedes manipular NSDictionary .

En segundo lugar, no hay ningún método como removeValueForKey .

Debe usar removeObjectForKey o removeObjectsForKeys .

En removeObjectsForKeys , debe pasar una matriz de parameters (keys como parámetro).

En removeObjectForKey puede pasar una cadena (key) como parámetro.

Creo que estás usando $ mal. Cuando llama a $.find en self.array la matriz contiene objects JSON, no estoy seguro de qué es exactamente el object, pero asumo que es Diccionario. Entonces, creo que deberías hacer algo como:

 let jsonWithMySubmissionId = self.array.filter ({ $0["submission_id"]! == 27 }).first 

Entonces, evitaría que esa fuerza se desenvuelva en el dictionary. Fue solo para que comprendieras mi punto en una línea de código.

Editar:

Luego puedes iterar sobre la matriz y extraer tus campos de esta forma:

 let jsonWithMySubmissionId = self.array.filter ({ $0["submission_id"]! == 27 }) for json in jsonWithMySubmissionId { json["name"] = nil json["task_id"] = nil ... }