Создание многострочных строк в JavaScript

Вы можете использовать рекурсию. Для любого заданного числа в наборе найдите комбинации меньших чисел, которые добавляются до числа:

public static IEnumerable<string> GetCombinations(int[] set, int sum, string values) {
  for (int i = 0; i < set.Length; i++) {
    int left = sum - set[i];
    string vals = set[i] + "," + values;
    if (left == 0) {
      yield return vals;
    } else {
      int[] possible = set.Take(i).Where(n => n <= sum).ToArray();
      if (possible.Length > 0) {
        foreach (string s in GetCombinations(possible, left, vals)) {
          yield return s;
        }
      }
    }
  }
}

Использование:

int[] set = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

foreach (string s in GetCombinations(set, 18, "")) {
  Console.WriteLine(s);
}

Выход:

1,2,4,5,6,
3,4,5,6,
1,2,3,5,7,
2,4,5,7,
2,3,6,7,
1,4,6,7,
5,6,7,
1,2,3,4,8,
2,3,5,8,
1,4,5,8,
1,3,6,8,
4,6,8,
1,2,7,8,
3,7,8,
2,3,4,9,
1,3,5,9,
4,5,9,
1,2,6,9,
3,6,9,
2,7,9,
1,8,9,
1,3,4,10,
1,2,5,10,
3,5,10,
2,6,10,
1,7,10,
8,10,
2329
задан Potherca 8 May 2013 в 15:37
поделиться

3 ответа

Обновление:

ECMAScript 6 (ES6) представляет новый тип литерала, а именно шаблонные литералы . У них много функций, среди них переменная интерполяция, но, что важнее всего, в этом вопросе они могут быть многострочными.

Литерал шаблона отделяется обратными чертами :

var html = `
  <div>
    <span>Some HTML here</span>
  </div>
`;

(Примечание: я не защищаю использовать HTML в строках)

Поддержка браузера в порядке , но вы можете использовать транспортеры для большей совместимости.


Оригинальный ответ ES5:

Javascript здесь нет Синтаксис документа. Однако вы можете избежать буквального перехода на новую строку:

"foo \
bar"
2997
ответ дан 22 November 2019 в 19:55
поделиться

Вы можете сделать это ...

var string = 'This is\n' +
'a multiline\n' + 
'string';
200
ответ дан 22 November 2019 в 19:55
поделиться

the pattern text = << "HERE" Эта многострочная строка ЗДЕСЬ недоступна в js (я помню, как много раз ее использовал в старые добрые времена Perl).

Для контроля над сложными или длинными многострочными строками я иногда использую шаблон массива:

var myString = 
   ['<div id="someId">',
    'some content<br />',
    '<a href="#someRef">someRefTxt</a>',
    '</div>'
   ].join('\n');

или уже показанный анонимный шаблон (экранирование новой строки), который может быть уродливым блоком в вашем коде:

    var myString = 
       '<div id="someId"> \
some content<br /> \
<a href="#someRef">someRefTxt</a> \
</div>';

Вот еще один странный, но рабочий 'трюк' 1 :

var myString = (function () {/*
   <div id="someId">
     some content<br />
     <a href="#someRef">someRefTxt</a>
    </div>        
*/}).toString().match(/[^]*\/\*([^]*)\*\/\}$/)[1];

внешнее редактирование: jsfiddle

ES20xx поддерживает растягивающие строки в нескольких строках с использованием шаблонных строк :

let str = `This is a text
    with multiple lines.
    Escapes are interpreted,
    \n is a newline.`;
let str = String.raw`This is a text
    with multiple lines.
    Escapes are not interpreted,
    \n is not a newline.`;

1 Примечание: это будет потеряно после минимизации / запутывания вашего кода

663
ответ дан 22 November 2019 в 19:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: