【问题标题】:How to get the value in object based on the largest key (Date is an Key)如何根据最大键获取对象中的值(日期是键)
【发布时间】:2017-01-27 22:16:04
【问题描述】:

我将对象的日期作为键,值作为位置。我想根据最大的日期获取位置。这里的位置是一样的。日期键为“MM/DD/YYYY”格式。

var obj ={};
    obj['9/10/2016'] = "India-Chennai";
    obj['9/15/2016'] = "Australia-Melborne";
    obj['9/20/2016'] = "India-Delhi";
    obj['9/25/2016'] = "India-Chennai";

从上面的对象中,最大的 Date(Key) 是“9/25/2016”,值是“India-Chennai” 如何根据最大的键获取值?

提前致谢

【问题讨论】:

  • 键是字符串...
  • obj[9/10/2016] ==> bj['9/10/2016']
  • 你不能有重复的属性
  • “例如,我想获取澳大利亚的位置” - 但这意味着测试两个 键 以获得最大日期,和 values 过滤掉任何不提及澳大利亚的内容。尽管您显示的代码是可以运行的有效 JS,但结果根本不是您想要的(出于其他 cmets 中提到的原因)。
  • 我已经编辑了问题,对于场景,我需要获取基于位置的最大键

标签: javascript date object keyvaluepair


【解决方案1】:

您可以使用Object.keys()、Array.prototype.map()、Math.max()、Date.prototype.getTime()、Array.prototype.indexOf()

var obj = {};
obj['9/10/2016'] = "India-Chennai";
obj['9/15/2016'] = "Australia-Melborne";
obj['9/20/2016'] = "India-Delhi";
obj['9/25/2016'] = "India-Chennai";

var keys = Object.keys(obj);
var map = keys.map(function(date) {return new Date(date).getTime()});
var key = Math.max.apply(Math, map);
var value = obj[keys[map.indexOf(key)]];

console.log(value);

【讨论】:

    【解决方案2】:

    你可能会做这样的事情;

    var obj = {},
     latest = [];
      obj['9/20/2016'] = "India-Delhi";
      obj['9/10/2016'] = "Japan-Osaka";
      obj['9/25/2016'] = "India-Chennai";
      obj['9/15/2016'] = "Australia-Melborne";
      
     latest = obj[Object.keys(obj).sort((a,b) => new Date(b).getTime() - new Date(a).getTime())[0]];
     console.log(latest);

    【讨论】:

      【解决方案3】:

      您可以使用Object.keys() 将键列表作为数组获取,然后使用.sort() 该数组:

      var obj ={};
      obj['9/10/2016'] = "India-Chennai";
      obj['9/9/2016'] = "Australia-Melborne";
      obj['9/25/2016'] = "India-Chennai";
      obj['9/20/2016'] = "India-Delhi";
          
      var parseDate = d => (d = d.match(/(\d{1,2})\/(\d{1,2})\/(\d{4})/)) && new Date(d[3],d[1]-1,d[2]);
      var latestKey = Object.keys(obj).sort((a, b) => parseDate(a) - parseDate(b)).pop();
      var result = obj[latestKey];
      
      console.log(latestKey, result);

      我使用了一个正则表达式来解析日期,以便代码可以轻松地适应其他日期格式,例如,如果您需要 d/m/yyyy 而不是 m/d/yyyy。

      【讨论】:

      • 只回答正确解析字符串。虽然我会使用d.split(/\D/),所以可以使用任何非数字分隔符。 ;-)
      猜你喜欢
      • 1970-01-01
      • 2022-12-02
      • 2021-07-25
      • 2017-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      相关资源
      最近更新 更多