Я работал над проблемой на FreeCodeCamp, которая называется "9 миллиардов имен Бога целого числа" .(Специфика самой проблемы не имеет отношения к моему вопросу, но посмотрите на ссылку, если вам интересно.) По общему признанию, я боролся с этой проблемой в течение нескольких дней, прежде чем сдаваться и гуглить ответ.Проблема изначально возникла из 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]
после него.Что это делает?Я знаю назначение скобок, поскольку они относятся к массивам и объектам, но я не могу найти никакой документации об этом использовании.Имейте в виду, что скрипт, кажется, работает как задумано, независимо от того, что результат выводится на консоль, как и ожидалось, и никаких ошибок не появляется.