2016-05-31 53 views
4

我基于所述submission_id试图从一个阵列(称为array)拉出变量(safety_rating_idscore等)使用迅速库Dollarhttps://github.com/ankurp/Dollar)的find方法这样我以后可以做一个POST请求(最后,我希望能够代替我与拉数组变量参数的硬编码值),与他们但从find所有返回零我的结果。如何从多维数组过滤器内侧阵列

这些都是内阵列我想其中submission_id27从这个数组https://codeshare.io/zr1pw(行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" 
} 

代码:

var array: [JSON] = [] 
    func submitScore(onCompletion:() ->(), onError: ((NSError) ->())? = nil) { 

    guard let endPoint = Data.sharedInstance.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) 
     } 

    } 

} 

UPDATE

我可以用submission_id 27获得数组,但我想删除nametask_id从两个submission_id : 27阵列添加schedule_job_id,我从别处得到的。

我试过用for in循环来创建我自己想要的变量的数组,但我不断收到nil崩溃。这是新的数组的样子https://codeshare.io/3VJSo

for in loop error

最后,我希望做一个"ratings" : [chosenArray]

+0

你为什么要调用'.validate()'两次? – NRitH

+0

哦,我没有注意到,谢谢你指出 – noobdev

+0

你有另一个类似的问题,我已经回答了:http://stackoverflow.com/questions/37540689/how-to-identify-specific-values-in-json-response – 66o

回答

2

我认为你正在使用$错误。 当你调用上self.array$.find数组包含JSON对象,不知道该对象到底是的,但我以为这是字典。 所以,我认为你应该这样做:

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

然后,我会避免对字典,力展开。这只是为了让你在一行代码中理解我的观点。

编辑:

然后你就可以在阵列上进行迭代,你的领域是这样的:

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

嗨你知道我如何从每个生成的数组中删除'name'和'task_id'(查看更新后的文章) – noobdev

+0

查看我对原文的编辑,如果它解决了你的问题,请考虑接受答案 – orxelm

2

那么回调的内部传递得到的是阵列中的每个元素,所以你会通过字典对象。所以,如果你想找到数组中的特定项目,你应该做

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

如果你想在阵列具有提交ID为27的所有元素,然后用filter

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

要从删除属性字典对象,你需要调用removeValueForKey方法在阵列上的每个项目。

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

dic在您的循环必须是NSMutableDictionary类型。因为你不能操纵NSDictionary

第二件事没有像removeValueForKey这样的方法。您可以使用removeObjectForKeyremoveObjectsForKeys

removeObjectsForKeys你必须传递参数数组(键作为参数)。

removeObjectForKey中,您可以传递一个字符串(键)作为参数。