我正在寻找一种解析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的答案都将非常有帮助!
答案 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)
}
}
}
}
答案 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)
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>