如何将数组映射到日期?

时间:2018-11-12 16:32:52

标签: javascript arrays

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

Dictionary << Date, int []>>

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

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

3 个答案:

答案 0 :(得分:2)

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

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

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


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

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

答案 1 :(得分:1)

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

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

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

因此,它们将不会存储在地图的同一条目中。相反,您可以只对日期进行字符串化,因为字符串是按值比较的。 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]
 );
  

我只需要按天分组

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

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

然后使用该字符串作为“地图/对象”键。

答案 2 :(得分: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))
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>