2017-04-22 3 views
0

sortのドキュメントをhttps://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/sort?v=exampleに従っています。動いていない。私はさらに厄介な問題を抱えています。数時間後に、私がvar comparatorfunction comparator(a,b)に変更すると、それは機能します。何故ですか??プロパティによるソートオブジェクトが機能していません

test(); 

var comparator = (a, b) => { 
    if (a.min !== b.min) { 
     if (a.min < b.min) { 
      return -1 
     } else { 
      return +1 
     } 
    } else { 
     if (a.max !== b.max) { 
      if (a.max < b.max) { 
       return -1 
      } else { 
       return +1 
      } 
     } else { 
      return 0; 
     } 
    } 
} 
function test() { 
    for (var x = 0; x < 1; x++) { 
     var tests = [{min: 18, max: 20}, 
      {min: 17, max: 20}, 
      {min: 10, max: 11}]; 
     console.log(tests.sort(comparator), 'test sorted'); 
    } 

} 
+2

変数の巻き上げをよく読んで – charlietfl

答えて

1

これは変数hoistingの問題によるものです。関数式が定義される前に関数式を呼び出そうとしています。あなたがそれを実行するときcomparatorundefinedです。

2

最後に機能testの呼び出しを行うと機能します。 JavaScriptのhoistingに関連しています。

var comparator = (a, b) => { 
 
    if (a.min !== b.min) { 
 
     if (a.min < b.min) { 
 
      return -1 
 
     } else { 
 
      return +1 
 
     } 
 
    } else { 
 
     if (a.max !== b.max) { 
 
      if (a.max < b.max) { 
 
       return -1 
 
      } else { 
 
       return +1 
 
      } 
 
     } else { 
 
      return 0; 
 
     } 
 
    } 
 
} 
 

 
function test() { 
 
    for (var x = 0; x < 1; x++) { 
 
     var tests = [{min: 18, max: 20}, 
 
      {min: 17, max: 20}, 
 
      {min: 10, max: 11}]; 
 
     console.log(tests.sort(comparator), 'test sorted'); 
 
    } 
 

 
} 
 

 
test();

更新

charlietflが原因スクリプトを巻き上げ、彼のコメントで指摘したように、あなたが右comparatortest関数の呼び出しを移動した場合にも、働くだろう宣言。

var comparator = (a, b) => { 
 
    if (a.min !== b.min) { 
 
     if (a.min < b.min) { 
 
      return -1 
 
     } else { 
 
      return +1 
 
     } 
 
    } else { 
 
     if (a.max !== b.max) { 
 
      if (a.max < b.max) { 
 
       return -1 
 
      } else { 
 
       return +1 
 
      } 
 
     } else { 
 
      return 0; 
 
     } 
 
    } 
 
} 
 

 
test(); 
 

 
function test() { 
 
    for (var x = 0; x < 1; x++) { 
 
     var tests = [{min: 18, max: 20}, 
 
      {min: 17, max: 20}, 
 
      {min: 10, max: 11}]; 
 
     console.log(tests.sort(comparator), 'test sorted'); 
 
    } 
 

 
}

+0

ことが – charlietfl

+0

修正@charlietflを掲揚されるので、関数宣言の前に置くことができます!これを指摘してくれてありがとう。私はちょうど私の答えを更新した。 – Christos

関連する問題