在C#中,我将使用以下字典
Dictionary << Date, int []>>
用于将数组绑定到特定日期。用JS实现相同的最简单方法是什么?
我需要能够更改整数数组中的值。
答案 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
,因此可以将unix
或toDate().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>