2017-10-24 1 views
2

なぜこのスニペットログfalse、次にfalse、次に-1?瞬間yは結局のところxのクローンです!Moment.JS:同じ日付(同じ瞬間のクローン)を持つ `===`または `==`またはindexOfがfalse(または-1)を返すのはなぜですか?

(私の目標は、その日(モーメント)のクローンを使用して配列内の日付(瞬間)を配置することである。どのように私は私の目標に達することができる?)

var x = moment(); 
 
var y = moment(x); 
 

 
var a = moment(); 
 
var b = moment(); 
 
var c = moment(); 
 

 
console.log(x === y); 
 
console.log(x == y); 
 

 
var moments = [a, x, b, c]; 
 

 
console.log(moments.indexOf(y)); 
 

 

 
console.log(x); 
 
console.log(y);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.1/moment-with-locales.min.js" integrity="sha256-TbOIe++NbC9P3KTtUMJ5wcROlBdnRqrPleLdpPg3xxE=" crossorigin="anonymous"></script>

+0

おそらくそれらは比較対象のオブジェクトなので、beiとして評価されることはありません同じ。タイムスタンプを取得して比較してみてください。 –

+0

@ B.Flemingだから、indexOfを使用することは不可能でしょうか?右? forループを使用する義務はありますか? – Mike

答えて

3

xyは両方ともオブジェクト参照であるため、それらが等しいかどうかを確認することは、オブジェクト内の値が同じであるかどうかではなく、両方がメモリ内の同じオブジェクトであるかどうかを確認することです。 Moment.jsは比較のためのいくつかの機能を提供します。あなたのケースでは、.isSameは十分です:

var x = moment(); 
 
var y = moment(x); 
 

 

 
console.log(x.isSame(y));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.1/moment-with-locales.min.js"></script>

は、配列の要素は、時間と一致するかどうかを確認するには、findIndexを使用することができます。

var x = moment(); 
 
var y = moment(x); 
 
var a = moment('2010-10-20'); 
 
var b = moment('2010-10-21'); 
 
var c = moment('2010-10-22'); 
 

 
var moments = [a, x, b, c]; 
 

 
const index = moments.findIndex(moment => moment.isSame(y)); 
 
console.log(index);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.1/moment-with-locales.min.js"></script>

+0

本当にありがとう! – Mike

+0

@ところで、ここでは、あなたが瞬間に行うことができる他の比較に関する文書があります:http://momentjs.com/docs/#/query/ –

関連する問題