17

次のコード (React JS コード) を検討してください。

  poll() {
    var self   = this;
    var url    = "//" + location.hostname + "/api/v1/eve/history/historical-data/" + this.state.itemId + '/' + this.state.regionId + '/40';

    $.get(url, function(result) {
      console.log(result.data, result.data.reverse());
      self.setState({
        error:          null,
        historicalData: result.data.reverse(),
        isLoading: false
      });
    }).fail(function(response) {
      self.setState({
        error: 'Could not fetch average price data. Looks like something went wrong.',
      });
    });
  }

console.log に注意してください。画像を見てみましょう:

ここに画像の説明を入力

最後に確認したところ、リバースは配列の順序を逆にする必要がありました。しかし、そうではありません。

私はこれを間違って使用していますか (公式 MDN ドキュメント) ? なぜリバースが機能しないのですか?

4

5 に答える 5

17

それを逆にしました。reverse()は の前に実行されconsole.log()ます。最初に実際の配列を変更して参照を返すため、ログに記録されるとa逆になります。

var a = [1,2,3,4];
console.log(a, a.reverse());
// [4, 3, 2, 1] [4, 3, 2, 1]

console.log括弧内のすべてが最初に評価されます。あなたの例のように、元の順序に戻ります。

var a = [1,2,3,4]
console.log(a, a.reverse());
// [4, 3, 2, 1] 
于 2016-03-03T18:59:18.180 に答える
5

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverseで説明されreverse()ているように、配列の順序を逆にするため、配列呼び出された後に逆になります。2回呼び出しているため、配列が元の順序に復元されます。これを試して:

poll() {
    var self   = this;
    var url    = "//" + location.hostname + "/api/v1/eve/history/historical-data/" + this.state.itemId + '/' + this.state.regionId + '/40';

    $.get(url, function(result) {
        result.data.reverse();
        console.log(result.data, result);
        self.setState({
            error:          null,
            historicalData: result,
            isLoading: false
        });
    }).fail(function(response) {
        self.setState({
            error: 'Could not fetch average price data. Looks like something went wrong.',
    });
}
于 2016-03-03T19:02:39.153 に答える
5

問題の原因は、ブラウザのコンソールがどのように機能するかを理解していないことです。

多くのブラウザーには、コンソールでオブジェクトを展開したとき、またはコンソールを開いたときの状態でオブジェクトを表示するコンソールがありますconsole.log()。したがって、次のようにします。

console.log(result.data);
result.data.reverse();
console.log(result.data);

同じ出力が 2 回表示されます。2 行目は配列を反転させているため、両方のログ出力は現在の状態で同じ配列を示しています。

このコンソールの動作を実証するには、次の操作を実行できます。

var b = { a: [1, 2, 3] };
console.log(b);
b.a[1] = 9;
console.log(b);

両方のコンソール出力に表示さb.aれます。[1, 9, 3]

于 2016-03-03T19:50:11.887 に答える