【问题标题】:How to map an array to a date?如何将数组映射到日期?
【发布时间】:2019-04-15 10:10:58
【问题描述】:

在 C# 中,我会使用以下字典

Dictionary << Date, int []>>

用于将数组绑定到特定日期。在 JS 中实现相同目标的最简单方法是什么?

我需要能够更改整数数组中的值。

【问题讨论】:

  • 你可以在 JS 中创建几乎相同的东西。 :stackoverflow.com/questions/7196212/…
  • 您可以使用 JavaScript Map 类,但请注意 Map 键的相等比较不如 Java 灵活(我强烈怀疑 C#)。
  • 只记得IE 8

标签: javascript arrays


【解决方案1】:

既然你提到你正在使用momentjs,你可以使用时刻unixtoDate().getTime()to get the date in ms,然后使用一个对象或Map 来获得你需要的东西:

let date1 = moment().unix()
let date2 = moment().add(7, 'days').unix()

let dict = {}  // using object

dict[date1] = [1,2,3]
dict[date2] = [4,5,6]

console.log('dict via Object', dict[date1], dict[date2])

let dict2 = new Map()  // using Map

dict2.set(date1, [1,2,3])
dict2.set(date2, [4,5,6])

console.log('dict via Map', dict2.get(date1), dict2.get(date2))
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"&gt;&lt;/script&gt;

【讨论】:

  • 你在getTime上有一个小错字
【解决方案2】:

您可以通过多种方式在 Js 中实现平等的行为。

Dicitionary 可以替换为Map,或者只是一个带有动态键的对象({}),但是如果你使用一个对象,你只能使用字符串作为键,其他任何东西都将转换为字符串. JS 中还有一个Date 对象,但是表示同一时间的两个日期不匹配:

 const a = new Date(0), b = new Date(0);
 console.log(a === b); // false

因此它们不会存储在 Map 的同一条目中。相反,您可以将日期字符串化,因为字符串是按值比较的。 int[] 只是 js 中的一个数字数组。

  const date1 = new Date(0);
  const date1b = new Date(0);

 const obj = {};
 const map = new Map;

 obj[date1] = [1, 2, 3];
 // equals:
 obj[date1.toString()] = [1, 2, 3];

 map.set(date1, [1, 2, 3]);
 map.set(date1.toString(), [3, 4, 5]);

 console.log(
   obj[date1b], // [1, 2, 3]
   map.get(date1b), // undefined
   map.get(date1b.toString()), // [3, 4, 5]
 );

我只需要按天分组

在这种情况下,您必须在 Date 之外生成一个仅包含日期的数字或字符串:

 (new Date()).toString().split("T")[0] // 2018-12-11

然后将该字符串用作 Maps / objects 键。

【讨论】:

  • 我从数据库中检索日期并在存储它们时使用 Moment。
  • @John 那么我猜时间戳已经是一个字符串(或一个数字?)在这种情况下就拿那个。
  • 请问-我意识到日期也与其时间组件一起保存,但我只需要按天分组,我怎样才能只使用日期组件?我想否则我永远不会在同一个键下有两条记录,因为毫秒不匹配:)
【解决方案3】:

使用该日期的时间戳作为 js 对象的键。

例如,假设您要将日期 a 映射到数组 b:

const a = new Date();
const b = [1, 2, 3];


const c = {
  [a.getTime()]: b,
};

在这种情况下,c 将是从日期到数组的对象或哈希映射。

【讨论】:

  • 尤其是对于 Date 实例,这不是一个坏主意,因为时间戳比较是可靠的并且适用于不同的 Date 实例。这可能更像是 OP 所期望的。
猜你喜欢
  • 1970-01-01
  • 2019-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-11
  • 1970-01-01
  • 1970-01-01
  • 2014-08-25
相关资源
最近更新 更多