给定一个类似var array1 = [{image: "some_image_url_1.png"}, {image: "some_image_url_2.png"}],
array2 = [{value: "some value 1"}, {value: "some value 2"}],
result = [array1, array2].reduce(
(r, a) => (a.forEach((o, i) => Object.assign(r[i] = r[i] || {}, o)), r),
[]
);
console.log(result);
的字符串,然后将其呈现给JS或Python等其他程序:
str = “\“
结果为# index.js.eex
console.log(„<%= str %>“)
# hello.py.eex
print(„<%= str %>“)
你看到反斜杠将逃避结束引用并在JS中产生语法错误的问题
问题是,我该如何解决?
PS:我在手机上写的,所以报价不正确,我会在笔记本电脑上尽快修好
答案 0 :(得分:2)
如果您使用Phoenix,您可能会发现这些非常有用 https://hexdocs.pm/phoenix_html/Phoenix.HTML.html#escape_javascript/1 https://hexdocs.pm/phoenix_html/Phoenix.HTML.html#html_escape/1
或者可能将其转换为JSON并跳过引号。这是一个例子。
# index.js.eex
console.log(<%= raw(Jason.encode!(str)) %>)
也许视图助手会更好(例如凤凰城):
defmodule MyAppWeb.LayoutView do
use MyAppWeb, :view
def raw_json(data) do
case Jason.encode(data) do
{:ok, result} -> raw(result)
{:error, _reason} -> nil # Depending on what fallback you want
end
end
end
答案 1 :(得分:1)
你可以&#34; javascript编码&#34; elixir中的字符串。
JS的规则是斜杠需要双重转义。你可以自己做,或者使用Phoenix.HTML.escape_javascript
之类的东西 escape_javascript("my string with \")
如果感兴趣,请参阅源代码here