在多维JavaScript对象中查找最大/最小日期
从下面的对象中查找最早开始日期和最晚结束日期的最简单方法是什么 (抱歉-我意识到已经有很多类似的问题了,但是我的JS技能很差,我无法将任何解决方案应用到我自己的数据中。因此,一个代码示例肯定会帮助我找到答案-谢谢!!)在多维JavaScript对象中查找最大/最小日期,javascript,jquery,Javascript,Jquery,从下面的对象中查找最早开始日期和最晚结束日期的最简单方法是什么 (抱歉-我意识到已经有很多类似的问题了,但是我的JS技能很差,我无法将任何解决方案应用到我自己的数据中。因此,一个代码示例肯定会帮助我找到答案-谢谢!!) 您可以简单地递归遍历树 var max = new Date(-100000000*86400000); var min = new Date( 100000000*86400000); function compare(key,value) { if (key ==
您可以简单地递归遍历树
var max = new Date(-100000000*86400000);
var min = new Date( 100000000*86400000);
function compare(key,value) {
if (key == "start" && value < min)
min=value;
else if (key == "end" && value > max)
max=value;
}
function traverse(obj, fun) {
for (prop in obj) {
fun.apply(this,[prop, obj[prop]]);
if (typeof(obj[prop]) == "object") {
traverse(obj[prop], fun);
}
}
}
traverse(ganttData, compare);
> max
Thu Jan 20 2011 00:00:00 GMT+0100 (W. Europe Standard Time)
> min
Mon Dec 06 2010 00:00:00 GMT+0100 (W. Europe Standard Time)
在你比较之前
我从JavaScript引用中得到了相反的结果。您可以简单地递归遍历树
var max = new Date(-100000000*86400000);
var min = new Date( 100000000*86400000);
function compare(key,value) {
if (key == "start" && value < min)
min=value;
else if (key == "end" && value > max)
max=value;
}
function traverse(obj, fun) {
for (prop in obj) {
fun.apply(this,[prop, obj[prop]]);
if (typeof(obj[prop]) == "object") {
traverse(obj[prop], fun);
}
}
}
traverse(ganttData, compare);
> max
Thu Jan 20 2011 00:00:00 GMT+0100 (W. Europe Standard Time)
> min
Mon Dec 06 2010 00:00:00 GMT+0100 (W. Europe Standard Time)
function getEarliestAndLatest(ganttData) {
var earliest = ganttData.start,
latest = ganttData.end,
phase,
task;
for (var i = 0, countPhases = ganttData.phase.length; i < countPhases; i++) {
phase = ganttData.phase[i];
if (phase.start < earliest) {
earliest = phase.start;
}
if (phase.end > latest) {
latest = phase.end;
}
if (typeof phase.task !== 'undefined') {
for (var j = 0, countTasks = phase.task.length; j < countTasks; j++) {
task = phase.task[j];
if (task.start < earliest) {
earliest = task.start;
}
if (task.end > latest) {
latest = task.end;
}
}
}
}
return { earliest: earliest, latest: latest };
}
在你比较之前
我从JavaScript引用中得到了相反的结果。函数getEarliestAndLatest(甘特数据){
function getEarliestAndLatest(ganttData) {
var earliest = ganttData.start,
latest = ganttData.end,
phase,
task;
for (var i = 0, countPhases = ganttData.phase.length; i < countPhases; i++) {
phase = ganttData.phase[i];
if (phase.start < earliest) {
earliest = phase.start;
}
if (phase.end > latest) {
latest = phase.end;
}
if (typeof phase.task !== 'undefined') {
for (var j = 0, countTasks = phase.task.length; j < countTasks; j++) {
task = phase.task[j];
if (task.start < earliest) {
earliest = task.start;
}
if (task.end > latest) {
latest = task.end;
}
}
}
}
return { earliest: earliest, latest: latest };
}
var earliest=GantData.start,
最新=甘特图数据.end,
阶段,
任务
对于(变量i=0,countPhases=ganttData.phase.length;i最新){
最新=阶段结束;
}
if(typeof phase.task!=“未定义”){
对于(var j=0,countTasks=phase.task.length;jlatest){
最新=task.end;
}
}
}
}
返回{最早:最早,最晚:最新};
}
函数getEarliestAndLatest(甘特图){
var earliest=GantData.start,
最新=甘特图数据.end,
阶段,
任务
对于(变量i=0,countPhases=ganttData.phase.length;i最新){
最新=阶段结束;
}
if(typeof phase.task!=“未定义”){
对于(var j=0,countTasks=phase.task.length;jlatest){
最新=task.end;
}
}
}
}
返回{最早:最早,最晚:最新};
}
谢谢。任何关于它为什么不是JSON以及什么使它成为JSON的输入?JSON是文本数据交换格式。在JavaScript中,JSON只能存在于字符串中。看见您所拥有的只是一个对象数组。对象文字看起来可能类似于JSON,但它们并不相同。仍然是一个对象数组。JSON将是例如var JSON='{“foo”:“bar”}'然后必须使用JSON对其进行解析。将解析为JavaScript对象以访问foo
。要小心改变你的问题。将日期作为字符串进行比较不同于比较Date
对象。就本项目而言,我想我对JSON不太感兴趣,而只是能够循环并获取所需的数据。我一会儿再去想。将日期重置回“Date”对象,以便于分析。谢谢。任何关于它为什么不是JSON以及什么使它成为JSON的输入?JSON是文本数据交换格式。在JavaScript中,JSON只能存在于字符串中。看见您所拥有的只是一个对象数组。对象文字看起来可能类似于JSON,但它们并不相同。仍然是一个对象数组。JSON将是例如var JSON='{“foo”:“bar”}'然后必须使用JSON对其进行解析。将解析为JavaScript对象以访问foo
。要小心改变你的问题。将日期作为字符串进行比较不同于比较Date
对象。就本项目而言,我想我对JSON不太感兴趣,而只是能够循环并获取所需的数据。我一会儿再去想。将日期重置回“Date”对象以使其更易于解析。这非常简单,而且看起来也很容易执行其他检查。非常感谢。巨大的帮助。足够简单,而且看起来执行额外的检查也很容易。非常感谢。巨大的帮助。