获取JSON响应中每个对象的最后一个值

时间:2019-02-07 01:35:39

标签: jquery ruby-on-rails parsing

我正在寻找一种解析JSON响应的方式,以使仅获取日期(按日期排列)。

当前JSON响应:

 @result =  [2018-01-01, 2018-01-02, 2018-01-03, 2018-01-04]

@result.last(2)或等效的rails自然只会获得整个数组中的最后两个日期。

不幸的是,

result.slice(-2)或jQuery的等效版本也只会获取我整个数组中的最后两个日期。

所需的解析结果:

[01, 02, 03, 04]

对于jQuery或Rails的答案都将非常有帮助!

3 个答案:

答案 0 :(得分:1)

您可以使用普通的javascript。

func retrieveData(completion: @escaping ([Post]) -> Void) {

    var posts: [Post] = []
    let postsColRef = db.collection("posts").order(by: "createdAt").limit(to: 3)
    let group = DispatchGroup()

    postsColRef.getDocuments() { (querySnapshot, error) in
        if let error = error {
            print("Document data: \(error)")
        } else {
            for document in querySnapshot!.documents {
                group.enter()
                let data = document.data()
                let userId = data["userId"] as? String
                let postImage = data["postImageURL"] as? String
                let createdAt = data["createdAt"] as? String
                //投稿に紐づくユーザーデータを取得して合わせてpostArrayに挿入
                let docRef = db.collection("users").document(userId!)

                docRef.getDocument() { (document, error) in
                    if let document = document, document.exists {

                        let data = document.data()!
                        let userName = data["userName"] as? String

                        let post = Post(
                            userId: userId!,
                            userName: userName!,
                            postImageURL: postImage!,
                            createdAt: createdAt!
                        )
                        posts.append(post)
                        group.leave()
                    }
                }
            }
            group.notify(queue: .main) {
                print(posts)
                completion(posts)
            }
        }
    }
}

MDN Documentation on the Array Map function

答案 1 :(得分:1)

您可以使用以下正则表达式来匹配字符串中的最后数字:

results

然后,您可以在const result = ["2018-01-01", "2018-01-02", "2018-01-03", "2018-01-04"], days = result.map(day => day.match(/-(\d+)$/)[1]); console.log(days);数组上使用.map,通过使用上述表达式将每个日期映射到一天。

请参见以下示例:

between

答案 2 :(得分:1)

  1. 您还可以将其转换为日期,并分别获取日期,月份和年份。
  2. 追加到数组后

var result = ["2018-01-01", "2018-01-02", "2018-01-03", "2018-01-04"];
var arr = [];
$.each(result, function(i, v) {
  var date = new Date(v);
  var day = date.getDate();
  var monthIndex = date.getMonth();
  var year = date.getFullYear();
  arr.push(day)
})
console.log(arr)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>