特别是当我们必须在两个日期之间选择数据时,以下哪个JSON更好
which of the following JSON is better to work with specially when we have to select data between 2 dates?
以下哪种JSON格式会更好。根据我的说法,第二个会更好,因为我可以直接找到特定日期的数据,只需通过数组索引。我更喜欢哪一个
首先 [{
"date" : "20100808", //2010-08-08
"data" : "one"
},
{
"date" : "20100809",
"data" : "Two"
}]
第二
[{
"20100808" : "one"
},
{
"20100809" : "Two"
}]
当你想要select data between two dates
时,第一个更好。你可以这样写
data = [{
"date" : "20100808", //2010-08-08
"data" : "one"
},
{
"date" : "20100809",
"data" : "Two"
}];
dataBetwnTwoDates = data.filter(function(d) {
var date = new Date(d.date); // insert your function to convert "20100808" into Date object and store in date.
return +date > +date1 && +date < date2; // +date will convert Date object to integer; date1 and date2 are Date objects in between whom you want the data to be.
});
根据标题的要求,您希望搜索范围内的数据,您的第一个建议似乎很有希望。为了确保,我希望函数签名类似于
collect_data(json_arr, begin_date, end_date) {}
,其中函数返回JSON片段中描述的"data"元素数组。
范围查询
假设数组的元素按日期排序,您可以在begin_date
上进行二进制搜索以找到应该落入范围的第一个元素,然后继续迭代数组,直到数组或end_date
的结束。
注意两点:
- 确切的
begin_date
和end_date
可能不包含在JSON中(但二进制搜索仍然有效)。 - JSON中可能不包含您正在查询的范围。
最坏的情况下运行时间是O(n),这是你能做到的最好的情况,因为在最坏的情况下你必须从每个元素收集数据。
<<p> 点查询/strong>对于点查询,您也可以使用上述方法,这将在O(log(n))中运行,或者如果您有空间创建一个索引结构,将时间戳映射到数组中的正确索引。例如:
{
"20100809": 0, //element to be found in json_arr[0]
"20100810": 1,
}
运行时间为0(1)。
相关文章:
- 如何在JQuery数据选择器中显示小时数
- 对话框,数据选择器获取id
- 使用数据选择器和时刻处理不同语言的日期
- JavaScript 数据选择器限制日期
- 传递要发送的数据.选择选项文本和值
- JQuery 数据选择器在格式之间转换
- 如何更改 jquery UI 数据选择器的样式 (CSS)
- 追加到数据选择器的值,然后从中删除
- angularJS填充用Json数据选择并选择所选值
- 具有角度和引导程序的数据选择器绑定
- 如何在Meteor中提交和保存引导数据选择器的值
- 为什么谷歌翻译挂起我的斑马数据选择器
- jQuery数据选择器解析日期引发无效的日期异常
- 带有数据选择器的HTML JS日期差异
- 正在Jquery UI数据选择器上设置日期格式
- D3 / C3 -动画数据选择和悬停
- 无法获取d3.js数据.选择线路时连接和键功能工作
- 我如何从ajax加载数据选择jquery
- Jquery数据选择器查找具有特定数据值的所有元素
- 为什么我不能用javascript迭代保存在html数据选择器上的这个数组?