我正在尝试构建一种类型的地图: 键:日期->值:对象列表
为此,我获得了以下代码:
componentDidMount(){
let allPredictions = listAllPredictions();
this.predictions = new Map();
for (let i = 0; i<allPredictions.length; i++) {
let prediction = allPredictions[i];
if (!this.predictions.has(prediction.tsPredictionFor)){
this.predictions.set(prediction.tsPredictionFor, []);
}
let predictionsForDate = this.predictions.get(prediction.tsPredictionFor);
predictionsForDate.push(prediction);
}
let d = new Date(2019, 1, 10, 0, 0, 0, 0);
console.log('Prediction for date ' + d + ': ' + this.predictions.get(d));
console.log('All predictions: ')
console.log(this.predictions)
//this.setState({activePredictions: listActivePredictions()})
}
似乎无法正常工作的是,地图无法正确比较2个日期。我注意到.has
函数始终返回false,即使有些条目具有相同的日期。
如您所见,以下索引具有相同的日期:0和3、1、4、2和5,但是由于某种原因,地图无法检测到它,因此对于每个条目,它都会创建一个新列表(如您可以看到:Array(1))。
这是什么原因?
答案 0 :(得分:1)
Date
对象不会覆盖===
运算符,这意味着要比较的是它们是否具有相同的引用。
作为一个简单的示例,请使用以下代码:
console.log(new Date() === new Date())
无论如何,这总是会返回false,因为两个创建的对象都有不同的引用。
但是,您可以使用通过将它们格式化为键而生成的字符串:
console.log((new Date()).getTime() === (new Date()).getTime())