我有一个JavaScript数组,如:
var myArray = ['a', 'x', 'b', 'x', 'x', 'p', 'y', 'x', 'x', 'b', 'x', 'x'];
Run Code Online (Sandbox Code Playgroud)
我想只获取在特定元素发生2次之后出现的数组元素.
即在上面的数组中,我想获取随后出现的所有元素 'x', 'x'
所以我的输出应该是:
'p'
'b'
Run Code Online (Sandbox Code Playgroud)
我有一个解决方案,如:
var arrLength = myArray.length;
for (var i = 0; i < arrLength; i++) {
if(i+2 < arrLength && myArray[i] == 'x' && myArray[i+1] == 'x') {
console.log(myArray[i+2]);
}
};
Run Code Online (Sandbox Code Playgroud)
这满足了我的需求,但并不是那么通用.
例如.如果我要检查3次随之出现,然后再次我要补充内部条件,如果对myArray[i+2] == 'x'等.
任何人都可以提供更好的方法来获取元素吗?
我试图测试断开的链接但是,当我使用Wreq的get方法并运行到404时,我得到一个异常(见底部)而不是要处理的statusCode.似乎只返回了200s.
我试图按照教程中的错误处理代码,但我找不到返回相同类型的方法get u.而且,这似乎比我在这种情况下需要的更复杂.
我怎样才能简单地阻止异常并按原样返回responseStatus
verifySeatme :: Maybe URL -> IO UrlStatus
verifySeatme url = do
case url of
Nothing -> return None
Just "" -> return None
Just u -> do
seatmeResp <- get u --`E.catch` handler
-- r ^? responseBody . key "url"
-- could also check for redirect to errorPage.aspx
if seatmeResp ^. W.responseStatus . statusCode == 200
then return (Working u)
else return Broken
where
handler e@(StatusCodeException s respHeaders _) = …Run Code Online (Sandbox Code Playgroud) 如何将文本 - 我知道'安全' - 直接插入到Elm页面中.
即text'以下内容.
let str = "<h1>Hello World</h1>"
in div [] [ text' str ]
Run Code Online (Sandbox Code Playgroud)
在实践中,我可以得到任何有效的HTML,所以我不想构建一个解析器,我宁愿避免使用一个端口,因为DOM可以打破虚拟dom diffing
这是我之前关于处理5.1米边缘有向图的矢量表示的问题的后续内容.我正在尝试实现Kosaraju的图算法,因此需要按照边缘反转的深度优先搜索(DFS)的完成时间的顺序重新排列我的Vector.我的代码在小数据集上运行,但在完整数据集上无法在10分钟内返回.(我不能排除大图出现循环,但我的测试数据没有迹象表明.)
DFS需要避免重新访问节点,因此我需要某种"状态"进行搜索(目前是一个元组,我应该使用State Monad吗?).第一次搜索应该返回一个重新排序的Vector,但是我现在通过返回重新排序的Node索引列表来保持简单,这样我就可以随后一次处理Vector.
我认为问题在于dfsInner.下面的代码"记住"访问的节点更新每个节点(第三个防护)的探索字段.虽然我试图使其尾递归,但代码似乎相当快地增加了内存使用. 我是否需要强制执行某些严格性,如果是,请如何执行?(我在单个搜索搜索中使用了另一个版本,它通过查看堆栈上未开发边缘的起始节点和已完成的节点列表来检查先前的访问.这不会增长得那么快,但是没有为任何连接良好的节点返回.)
但是,它也可能是foldr',但我怎么能检测出来?
这应该是Coursera的家庭作业,但我不再确定我可以勾选荣誉代码按钮!学习更重要,所以我真的不想复制/粘贴答案.我所拥有的并不是非常优雅 - 它也有一种迫切的感觉,这是由于保持某种状态的问题所致 - 见第三后卫.我欢迎对设计模式的评论.
type NodeName = Int
type Edges = [NodeName]
type Explored = Bool
type Stack = [(Int, Int)]
data Node = Node NodeName Explored Edges Edges deriving (Eq, Show)
type Graph = Vector Node
main = do
edges <- V.fromList `fmap` getEdges "SCC.txt"
let
maxIndex = fst $ V.last edges
gr = createGraph maxIndex edges
res = …Run Code Online (Sandbox Code Playgroud) 在 Windows 上开发完全陌生(因为我的 mac 正在维修),我正在尝试按照这些说明进行操作https://docs.microsoft.com/en-us/windows/wsl/install-win10
但是,虽然我似乎有足够的版本,但我的 wsl 似乎没有正确的选择。我已经安装了 wsl 更新,但在这样做时没有被要求提升特权。有任何想法吗?
我正在尝试切换到函数式编程,并希望使用下划线来实现JavaScript.
但我被困在一垒.我根本无法创建一个数组并使用命令式语言,我似乎无法正确地转换它们:n.length是正确的,但是n [0] .length是未定义的(参见小提琴)
var a = new Array(5);
for (i = 0; i < a.length; i++) {
a[i] = new Array(6);
}
var n = _.map(a, function (row, rowIdx) {
_.map(row, function(col, colIdx) {
return rowIdx * colIdx
});
});
console.log(a.length)
console.log(n.length)
console.log(a[0].length);
console.log(n[0].length);
Run Code Online (Sandbox Code Playgroud) 据我了解,动作创建者不了解状态,并且不允许减速器触发新动作.那么你如何根据状态调整一个动作 - 是否需要在渲染函数中完成?
作为一个例子,我有一个组件列出了项目集的标题.该数据存储在state.matches.单击某个项目应该会在我的Entries组件中显示详细视图.
目前,我有这个动作创建者,它下载条目并触发一个动作addEntry,使得entriesreducer将数据添加到state.entries中的缓存中.
export function getEntryFromId(id) {
return function(dispatch) {
dispatch(lookupInit(id));
fetch('/register/id/' + id)
.then( res => res.json() )
.then( res => dispatch(addEntry(res[0])) ) // data returned as array of one element
.catch( err => dispatch({ type: ENTRY_LOOKUP_FAIL }) );
}
}
Run Code Online (Sandbox Code Playgroud)
目前它总是下载新数据,因为它无法检查缓存.
另一种方法是将idSHOW_THIS_NEXT操作传递给条目端,此时reducer可以检查它是否在缓存中,如果没有则下载它.但是减速器不允许触发动作,最终可能被禁止.
我该如何勾选这个圆圈.
任何人都可以帮助我担心的一个愚蠢的错误.考虑这两个片段:
defmodule MosaicApi.Repo.Migrations.CreateCard do
use Ecto.Migration
def change do
create table(:cards) do
add :creation_date, :date
Run Code Online (Sandbox Code Playgroud)
和
defmodule MosaicApi.Card do
use MosaicApi.Web, :model
schema "cards" do
field :creation_date, Ecto.Date
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用一些数据
cards = [
%Card{
creation_date: "2014-04-17",
Run Code Online (Sandbox Code Playgroud)
我从互联网上找到的东西中得到了这些简单的字符串; 替代似乎是{"2015","04","17"}.
**(Ecto.ChangeError)值
"2014-04-17"用于MosaicApi.Card.creation_date在insert不匹配类型Ecto.Date
我想设置 Phoenix 为静态 index.html 提供服务,无论发送给它的路由是什么,而无需更改 URL,同时提供对非 html 资产(.js、.css、.jpg、...)的访问,因为我的SPA(在榆树中)会查看路线并确定要做什么。
端点.ex
plug Plug.Static,
at: "/", from: :mosaic_api, gzip: false,
only: ~w(assets css fonts images js favicon.ico robots.txt index.html)
Run Code Online (Sandbox Code Playgroud)
路由器文件
scope "/", Api do
pipe_through :browser # Use the default browser stack
get "/*path", PageController, :index # :elm
end
Run Code Online (Sandbox Code Playgroud)
页面控制器
defmodule Api.PageController do
use Api.Web, :controller
plug :action # Edit: now removed
def index(conn, _params) do
conn
|> put_layout(false)
|> render("index.html")
# Edit: replaced 3 lines …Run Code Online (Sandbox Code Playgroud) 我已经构建了一个可在浏览器中运行的 SPA,它在加载时提供了一个身份验证选项,我单击 google 登录,firebase 身份验证流程将继续,直到我拥有身份验证令牌等。
然后我可以切换 PWA 并正常使用。但是,如果我随后退出,我将无法使用 Google Auth 再次登录该应用程序 - 无论我是让 google 登录弹出窗口在应用程序中还是在 Chrome 中运行,都不会确认该应用程序,实际上它似乎崩溃了。
该问题与加载 google 登录的附加选项卡有关。根据屏幕上的对话框,Android 询问我是在 PWA 中还是在 Chrome 中打开此选项卡。无论我选择哪个选项,流程都不会完成(并且由于断开连接,我在 devtools 中看不到任何有用的东西)。
似乎唯一可行的流程是继续在 chrome 上登录,只有在登录完成后,才切换到应用程序版本。这对我来说在 StackOverflow 上写代码很好,但对我的用户来说非常复杂。
我如何开始调试这种情况: - 是否可以从 PWA 进行 Firebase 身份验证;和/或 - 是否有某种方法可以延迟 Android 弹出窗口添加到主屏幕,直到用户登录浏览器?
很高兴分享代码,这是 googlesignin 函数 - 它不做任何事情,因为我通常在等待代码中的 onAuthState 消息,并且该消息包含我需要的所有信息。
function signinGoogle() {
var provider = new firebase.auth.GoogleAuthProvider();
firebase.auth().signInWithPopup(provider).then(function(result) {
// This gives you a Google Access Token. You can use it to access the Google API.
var token = …Run Code Online (Sandbox Code Playgroud)