簡體   English   中英

數組推調用后在方括號中聲明的目的是什么?

[英]What is the purpose of a statement in square brackets after an array push call?

我一直在FreeCodeCamp上研究一個名為“ 90億個整數上帝的名字”的問題 (問題的具體內容與我的問題無關,但是,如果您有興趣,請查看鏈接。)誠然,我在放棄和谷歌搜索答案之前已經花了幾天時間來解決這個問題。 問題最初來自Rosetta Code,我着手閱讀為JavaScript提供的答案,以確保我了解如何解決此問題。

據我所知,它是通過老式的for循環進行計算的,即使它發布時帶有簡短的,非描述性的變量名,我想我也可以自己解決。 但是,這是讓我感到困惑的部分(請注意,下面的代碼是Rosetta Code解決方案的清理后的復制品,其中包含很多不必要的注釋和錯別字):

(function() {
  var cache = [
    [1]
  ];

  function cumu(n) {
    var r, l, x, Aa, Mi;
    for (l = cache.length; l < n + 1; l++) {
      r = [0];
      for (x = 1; x < l + 1; x++) {
        r.push(r[r.length - 1] + (Aa = cache[l - x < 0 ? cache.length - (l - x) : l - x])[(Mi = Math.min(x, l - x)) < 0 ? Aa.length - Mi : Mi]);
      }
      cache.push(r);
    }
    return cache[n];
  }

  function row(n) {
    var r = cumu(n),
      leArray = [],
      i;
    for (i = 0; i < n; i++) {
      leArray.push(r[i + 1] - r[i]);
    }
    return leArray;
  }

  console.log("Rows:");
  for (iterator = 1; iterator < 12; iterator++) {
    console.log(row(iterator));
  }

  console.log("Sums");
  [23, 123, 1234].forEach(function(a) {
    var s = cumu(a);
    console.log(a, s[s.length - 1]);
  });
})()

特別是在cumu(n)這一行:

r.push(r[r.length - 1] + (Aa = cache[l - x < 0 ? cache.length - (l - x) : l - x])[(Mi = Math.min(x, l - x)) < 0 ? Aa.length - Mi : Mi]);

push方法后面有[square brackets] 那是做什么的? 我知道括號的用途,因為它們與數組和對象有關,但是找不到有關此用法的任何文檔。 請注意,腳本似乎可以按預期運行,結果按預期輸出到控制台,並且不會出現錯誤。

(Aa = cache[l - x < 0 ? cache.length - (l - x) : l - x]) 

返回數組,因為cache是多維數組。 它位於括號之間,因為還需要設置Aa

此代碼的主要問題是很難閱讀。 打開您的IDE並逐段重組代碼可能是明智的。 這樣您將能夠更好地理解它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM