Перенаправить в случайный домен в массиве? [Дубликат]

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

Чтобы создать дочернюю тему, обратитесь к этому: https : //codex.wordpress.org/Child_Themes

Да, если вы хотите отредактировать заголовочный файл, скопируйте header.php из папки тем в папку дочерних тем и внесите необходимые изменения.

326
задан thefourtheye 20 November 2015 в 00:52
поделиться

15 ответов

использовать ` ( тяжелые акценты, также известные как backtick ) вместо одиночной кавычки (') или двойную кавычку (") и знак знака доллара / скобки ${ variable }

Например:

console.log(
  `current date: ${new Date()}`
);

Подробнее о шаблонных литералах здесь .

159
ответ дан Ivan 19 August 2018 в 09:51
поделиться
  • 1
    Для кого-то еще интересно, почему они не могут заставить его работать, обратите внимание на использование обратных тиков. – Sceletia 25 April 2018 в 07:05
  • 2
    это тоже не работает с IE11. – Pants 7 May 2018 в 17:44
  • 3
    Как ни странно, это нарушает подсветку синтаксиса StackOverflow – byxor 28 May 2018 в 10:08
207
ответ дан Ivan 30 October 2018 в 22:11
поделиться

Исправленный JavaScript Дугласа Крокфорда включает функцию String.prototype.supplant. Это короткий, знакомый и простой в использовании:

String.prototype.supplant = function (o) {
    return this.replace(/{([^{}]*)}/g,
        function (a, b) {
            var r = o[b];
            return typeof r === 'string' || typeof r === 'number' ? r : a;
        }
    );
};

// Usage:
alert("I'm {age} years old!".supplant({ age: 29 }));
alert("The {a} says {n}, {n}, {n}!".supplant({ a: 'cow', n: 'moo' }));

Если вы не хотите менять прототип String, вы всегда можете приспособить его к автономному или поместить его в другое пространство имен или что угодно.

173
ответ дан Chris Nielsen 19 August 2018 в 09:51
поделиться
  • 1
    Примечание. Это будет работать в десять раз медленнее, чем просто конкатенация. – roosteronacid 11 September 2009 в 08:00
  • 2
    И возьмите в три раза больше нажатий клавиш и amp; байт. – ma11hew28 9 June 2011 в 17:23
  • 3
    @roosteronacid - Можете ли вы дать некоторую перспективу относительно этого снижения скорости? Например, от 0,01 до 0,1 с (важно) или от 0,000000001 до 0,00000001s (нерелевантно)? – chris 2 October 2012 в 17:52
  • 4
    @george: быстрый тест на моей машине дал 7312 нс для «Корова говорит moo, moo, moo! & quot; используя метод Крокфорда против 111 нс для предварительно скомпилированной функции, которая вытягивает переменные из переданного объекта и объединяет их с постоянными частями строки шаблона. Это был Хром 21. – George 25 October 2012 в 22:13
  • 5
    Или используйте его как: "The {0} says {1}, {1}, {1}!".supplant(['cow', 'moo']) – Robert Massa 19 February 2013 в 15:31

Развернув второй ответ Грег Киндел , вы можете написать функцию, чтобы исключить часть шаблона:

var fmt = {
    join: function() {
        return Array.prototype.slice.call(arguments).join(' ');
    },
    log: function() {
        console.log(this.join(...arguments));
    }
}

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

var age = 7;
var years = 5;
var sentence = fmt.join('I am now', age, 'years old!');
fmt.log('In', years, 'years I will be', age + years, 'years old!');
2
ответ дан Community 19 August 2018 в 09:51
поделиться

Осторожно: избегайте использования любой системы шаблонов, которая не позволит вам избежать собственных разделителей. Например, невозможно было бы вывести следующее, используя упомянутый здесь метод supplant().

"Мне 3 года благодаря моей переменной {age}."

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

<div> I am <span id="age"></span> years old!</div>

И используйте манипуляции jQuery: $('#age').text(3)

Альтернативно, если вы просто устали от конкатенации строк, всегда есть альтернативный синтаксис :

var age = 3;
var str = ["I'm only", age, "years old"].join(" ");
47
ответ дан greg.kindel 19 August 2018 в 09:51
поделиться
  • 1
    Замечание: Array.join() медленнее, чем прямая (+ стиль), потому что браузерные двигатели (включая V8, который включает в себя узел и почти все, что запускает JS сегодня) оптимизировали его в массовом порядке, и есть большая разница в пользу прямой конкатенации – pilau 19 November 2013 в 17:17
  • 2
    Метод вытеснения позволяет вам сгенерировать указанную вами строку: {токен} заменяется только, если объект данных содержит член с именем token - при условии, что вы не предоставляете объект данных, который имеет член age это будет хорошо. – Chris Fewtrell 1 February 2014 в 17:18
  • 3
    Крис, я не понимаю, как это решение. Я мог бы легко обновить пример использования как возрастной переменной, так и строки {age}. Вы действительно хотите беспокоиться о том, что вы можете назвать своими переменными на основе текста копии шаблона? - Кроме того, с этой должности я стал большим поклонником библиотек привязки данных. Некоторые, такие как RactiveJS, избавят вас от DOM, загруженного с помощью переменных интервалов. И в отличие от Усы, он обновляет только часть страницы. – greg.kindel 23 October 2014 в 16:13
  • 4
    Ваш основной ответ, похоже, предполагает, что этот javascript работает в среде браузера, хотя вопрос не помечен HTML. – canon 29 October 2015 в 20:46
  • 5
    Ваше «слово предостережения» относительно supplant необоснован: "I am 3 years old thanks to my {age} variable.".supplant({})); возвращает именно данную строку. Если заданы age, все еще можно распечатать { и } с помощью {{age}} – le_m 13 July 2016 в 20:52

Я использую этот шаблон на многих языках, когда я не знаю, как правильно это сделать, и просто хочу быстро понять идею:

// JavaScript
var stringValue = 'Hello, my name is {name}. You {action} my {relation}.'
    .replace(/{name}/g    ,'Indigo Montoya')
    .replace(/{action}/g  ,'killed')
    .replace(/{relation}/g,'father')
    ;

Хотя это не особенно эффективно, я находят это удобочитаемым. Он всегда работает и всегда доступен:

' VBScript
dim template = "Hello, my name is {name}. You {action} my {relation}."
dim stringvalue = template
stringValue = replace(stringvalue, "{name}"    ,"Luke Skywalker")     
stringValue = replace(stringvalue, "{relation}","Father")     
stringValue = replace(stringvalue, "{action}"  ,"are")

ВСЕГДА

* COBOL
INSPECT stringvalue REPLACING FIRST '{name}'     BY 'Grendel'
INSPECT stringvalue REPLACING FIRST '{relation}' BY 'Mother'
INSPECT stringvalue REPLACING FIRST '{action}'   BY 'did unspeakable things to'

UPDATE : Я обновил версию javascript для замены все , а не только первые.

13
ответ дан Jefferey Cave 19 August 2018 в 09:51
поделиться
  • 1
    фрагмент кобола сделал меня настолько мокрой – kappaallday 24 October 2017 в 18:05

Другой кувалдой: jquery-tmpl (шаблонизация с помощью jQuery).

3
ответ дан Jo Liss 19 August 2018 в 09:51
поделиться

Вот решение, которое требует, чтобы вы предоставили объект со значениями. Если вы не предоставляете объект в качестве параметра, он будет использовать глобальные переменные по умолчанию. Но лучше придерживаться этого параметра, он намного чище.

String.prototype.interpolate = function(props) {
    return this.replace(/\{(\w+)\}/g, function(match, expr) {
        return (props || window)[expr];
    });
};

// Test:

// Using the parameter (advised approach)
document.getElementById("resultA").innerText = "Eruption 1: {eruption1}".interpolate({ eruption1: 112 });

// Using the global scope
var eruption2 = 116;
document.getElementById("resultB").innerText = "Eruption 2: {eruption2}".interpolate();
<div id="resultA"></div><div id="resultB"></div>

6
ответ дан Lucas Trzesniewski 19 August 2018 в 09:51
поделиться
  • 1
    Не используйте eval, eval зло! – chris97ong 20 July 2014 в 14:17
  • 2
    @ chris97ong Хотя это «истина», по крайней мере, дает причину («зло» не помогает) или альтернативное решение. Почти всегда есть способ использовать eval, но иногда нет. Например, если OP хотел, чтобы интерполировать с использованием текущей области, без необходимости передавать объект поиска (например, как работает интерполяция Groovy), я уверен, что eval потребуется. Не просто прибегать к старой «eval is evil». – Ian 20 July 2014 в 14:41
  • 3
    никогда не используйте eval и никогда не предлагайте его использовать – hasen 4 January 2015 в 13:04
  • 4
    @hasenj вот почему я сказал, что & quot; не может быть лучшей идеей & quot; и предоставлен альтернативный метод. Но, к сожалению, eval - единственный способ доступа к локальным переменным в области . Поэтому не отвергайте его только потому, что это вредит вашим чувствам. Кстати, я также предпочитаю альтернативный путь, потому что это безопаснее, но метод eval - это то, что точно отвечает на вопрос OP, поэтому он находится в ответе. – Lucas Trzesniewski 4 January 2015 в 14:14
  • 5
    Проблема с eval заключается в том, что он не может получить доступ к vars из другой области, поэтому, если ваш вызов .interpolate находится в пределах другой функции, а не глобальной, это не сработает. – georg 26 July 2015 в 10:36

Вы легко можете использовать ES6 template string и перевести на ES5 с помощью любого доступного транспилярного бабеля.

const age = 3;

console.log(`I'm ${age} years old!`);

http://www.es6fiddle.net/im3c3euc/

8
ответ дан Mohammad Arif 19 August 2018 в 09:51
поделиться

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

var template = new Template("I'm #{age} years old!");
alert(template.evaluate({age: 21}));
20
ответ дан rzymek 19 August 2018 в 09:51
поделиться

Я могу показать вам пример:

function fullName(first, last) {
    let fullName = first + " " + last;
    return fullName;
}

function fullNameStringInterpolation(first, last) {
    let fullName = `${first} ${last}`;
    return fullName;
}

console.log('Old School: ' + fullName('Carlos', 'Gutierrez'));

console.log('New School: ' + fullNameStringInterpolation('Carlos', 'Gutierrez'));
1
ответ дан shades3002 19 August 2018 в 09:51
поделиться

tl; dr

Используйте литералы строк шаблона ECMAScript 2015, если это применимо.

Объяснение

Нет прямого способа сделать это, согласно ECMAScript 5, но в ECMAScript 6 есть шаблонные строки , которые также были известны как квазилитеры во время составления спецификации. Используйте их следующим образом:

> var n = 42;
undefined
> `foo${n}bar`
'foo42bar'

Вы можете использовать любое допустимое выражение JavaScript внутри {}. Например:

> `foo${{name: 'Google'}.name}bar`
'fooGooglebar'
> `foo${1 + 3}bar`
'foo4bar'

Другая важная вещь: вам больше не нужно беспокоиться о многострочных строках. Вы можете написать их просто как

> `foo
...     bar`
'foo\n    bar'

. Примечание: я использовал io.js v2.4.0 для оценки всех строк шаблонов, показанных выше. Вы также можете использовать последний Chrome для тестирования приведенных выше примеров.

Примечание. Спецификации ES6 теперь завершены , но еще не реализованы всеми основными браузерами. Согласно страницам Mozilla Developer Network , это будет реализовано для базовой поддержки, начиная с следующих версий: Firefox 34, Chrome 41, Internet Explorer 12. Если вы Opera, Safari или Internet Explorer пользователь и интересуются этим сейчас, этот тестовый слой можно использовать, чтобы играть, пока все не получат поддержку для этого.

200
ответ дан thefourtheye 19 August 2018 в 09:51
поделиться
  • 1
    Это можно использовать, если вы используете babeljs , чтобы вы могли ввести его в свою кодовую базу, а затем переместить шаг транспиляции, как только браузеры, необходимые для поддержки, реализуют его. – ivarni 29 October 2015 в 21:00
  • 2
    Есть ли способ преобразовать стандартную строку в строковый литерал шаблона? Например, если у вас был json-файл, содержащий таблицу переводов, для которой нужны значения, интерполированные в них для отображения? Я думаю, что первое решение, вероятно, хорошо работает для этой ситуации, но мне нравится новый синтаксис шаблона строки в целом. – nbering 3 March 2016 в 20:14
  • 3
    Поскольку это все еще один из первых результатов поиска по интерполяции js-строк, было бы замечательно, если бы вы могли обновить его, чтобы отразить общую доступность сейчас. «Нет прямого способа сделать это». скорее всего, не соответствует действительности для большинства браузеров. – Felix Dombek 13 March 2017 в 20:50
  • 4
    для плохого зрения в аудитории, «характер отличается от». Если у вас возникли проблемы с тем, чтобы это работало, убедитесь, что вы используете серьезную цитату (ака наклонная цитата, обратная цитата) ru.wikipedia.org/wiki/Grave_accent . Это в левом верхнем углу на клавиатуре :) – Quincy 13 April 2017 в 10:38
  • 5
    @Quincy Внизу слева от клавиатуры Mac - также известный как back-tick :) – RB. 4 May 2017 в 13:49

Если вы хотите интерполировать на выходе console.log, то просто

console.log("Eruption 1: %s", eruption1);
                         ^^

Здесь %s - это так называемый «спецификатор формата». console.log имеет встроенную встроенную поддержку интерполяции.

3
ответ дан user 19 August 2018 в 09:51
поделиться
  • 1
    Это единственный правильный ответ. Вопрос о интерполяции не является строкой шаблона. – sospedra 15 January 2018 в 11:41

Попробуйте sprintf . Например:

vsprintf('The first 4 letters of the english alphabet are: %s, %s, %s and %s', ['a', 'b', 'c', 'd']);
21
ответ дан user456584 19 August 2018 в 09:51
поделиться
  • 1
    Какая библиотека vsprintf является частью? Где я могу найти его? – user 10 September 2017 в 07:16

Попробуйте kiwi , легкий JavaScript-модуль для строковой интерполяции.

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

Kiwi.compose("I'm % years old!", [age]);

или

Kiwi.compose("I'm %{age} years old!", {"age" : age});
6
ответ дан zsong 19 August 2018 в 09:51
поделиться
  • 1
    Спасибо за это! Делает одно и делает это хорошо! Только то, что мне было нужно. – Steve Danner 20 July 2017 в 17:08
Другие вопросы по тегам:

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