【问题标题】:how to find nearest values both lower and upper in a javascript object?如何在javascript对象中找到最接近的值?
【发布时间】:2017-12-04 06:43:02
【问题描述】:

我需要在 javascript 对象中提取最接近的较低值和最接近的较高值。 我的逻辑是迭代对象并将所有低于我产品价值的值放入一个变量中(然后对最接近的较高值和所有优越值执行相同操作)

我要在该示例中提取的值是作为这样构造的对象的第一个值的日期:"object":[[val1, val2],[val1, val2]]

你认为我的逻辑是好的,你能看出我的代码有什么问题吗?

var datagrph = $.parseJSON('{"label":"Yo", "fromDate":"2015-06-05", "launchDate":"2016-08-15", "dateValues":[["2014-06-05",1723.76], ["2015-06-29",1523.76], ["2015-12-29",1023.76], ["2017-01-29",523.76], ["2017-02-22",1523.76], ["2017-03-29",523.76], ["2017-04-29",1523.76], ["2017-05-29",23.76], ["2017-06-21",523.76] ]}');
var productCour = datagrph.dateValues;
var launchDate = datagrph.launchDate;

var val1 = [0];

Object.keys(productCour).map(function(objectDate, index) {
    var value = object[objectDate];
    if (value <= launchDate) {
        val1.push(value);
    } else if (value > launchDate) {
        value++;
    }
    return val1;
});


alert(val1);

【问题讨论】:

  • value 仍然是一个数组...我不明白:你想要的输出是什么??
  • 更好的方法是计算每个值的差值,然后返回与当前值差值最小的值
  • @Jonasw 对我来说价值是特定的 val1(日期),我错了吗?我想要的输出是 val1 对应每个小于 objectDate 的值。
  • @katchou 如果对象 woupdnt 未定义,它将是一个数组。所以你想找到与launchDate最近的日期对应的值吗?
  • @abhishekkannojia 你的意思是这样的吗? stackoverflow.com/questions/8584902/…

标签: javascript arrays array.prototype.map


【解决方案1】:

只需计算当前日期和启动日期之间的差异,然后相应地设置值:

var datagrph = $.parseJSON('{"label":"Yo", "fromDate":"2015-06-05", "launchDate":"2016-08-15", "dateValues":[["2014-06-05",1723.76], ["2015-06-29",1523.76], ["2015-12-29",1023.76], ["2017-01-29",523.76], ["2017-02-22",1523.76], ["2017-03-29",523.76], ["2017-04-29",1523.76], ["2017-05-29",23.76], ["2017-06-21",523.76] ]}');
var productCour = datagrph.dateValues;

var launchDate = +new Date(datagrph.launchDate+" T00:00");

var before,after,diffmin,diffmax;

productCour.forEach(function(pair){

 var current=+(new Date(pair[0]+"T00:00"));
 var difference=launchDate-current;

 if(difference>0){
    //launchDate not reached
    if(!diffmin || diffmin>difference){
       //weve got a new before
       before=pair[1];
       diffmin=difference;
    }
  }else{
    //launchDate already reached
    if(!diffmax || diffmax<difference){
       //weve got a new after
       after=pair[1];
       diffmax=difference;
    }
  }
});

before 和 after 现在应该包含最接近的值。

before:1023.76
after: 523.76

http://jsbin.com/cozovecaha/edit?console

【讨论】:

  • 非常令人印象深刻,谢谢。似乎我们已经接近了,但是在后值(pair[0])中结果是“2017-06-21”它应该是“2017-01-29”
猜你喜欢
  • 2022-08-11
  • 2019-11-02
  • 2021-04-24
  • 1970-01-01
  • 1970-01-01
  • 2012-05-15
  • 2019-12-16
  • 1970-01-01
  • 2018-01-07
相关资源
最近更新 更多