我一直在研究分支机构的功能; 称它为'foo'.我现在已经完成并将其合并到master中并希望在本地和远程删除它.但是在将来的某个时候,我可能会再次开始研究这个功能,并且很想创建一个名为"foo"的新分支.
我不认为这对我来说是一个问题,但是如果其他人有我自己当前foo分支的副本,然后他们试图在创建新的foo分支后拉动它们会被搞砸了吗?
我显然可以这样做:
d3.selectAll('div#some-div>ul')
Run Code Online (Sandbox Code Playgroud)
但是如果我使用DOM节点或现有的D3选择怎么办:
d3.select(this).selectAll('ul')
Run Code Online (Sandbox Code Playgroud)
将获得所有后代的UL.因此,如果
var div = d3.select('div')
Run Code Online (Sandbox Code Playgroud)
给我这个节点:
<div>
<ul>
<li>foo
<ul><li>bar</li></ul>
</li>
<ul>
</div>
Run Code Online (Sandbox Code Playgroud)
然后
var uls = div.selectAll('ul')
Run Code Online (Sandbox Code Playgroud)
会得到两个UL.我想我可以区分出一个顶级的:
uls.filter(function() { return this.parentNode === div.node() }
Run Code Online (Sandbox Code Playgroud)
所以,我已经回答了我自己的问题.也许对某人有用.或许有人可以推荐一个不那么难看的解决方案.
nrabinowitz的答案下面的答案更好,并返回与上面相同的结果.这是一个比较它们的修改小提琴(但不使用console.log,这对我来说在jsfiddle中很奇怪)
我已经使用了面向对象的编程实践已有25年了,并试图在过去的5年中转向函数式编程,但是当我尝试做一些复杂的事情时,我的脑子总是转向OOP,特别是现在ES6支持体面的OOP语法,这是我构建东西的自然方式.
我现在正在学习Redux并且我理解(参见如何将方法放在Redux状态的对象上?)将类实例放入reducers中是不行的; 并且在普通减速器状态之上计算的推荐方法是使用选择器(例如,通过重新选择).而且,当然,阵营建议过遗传组合物(https://facebook.github.io/react/docs/composition-vs-inheritance.html,阵营终极版接力类).
但React/Redux生态系统中是否存在具有方法和继承的类对象的任何位置?
我想,为了回答我自己的问题,OOP类鼓励在同一个地方添加数据属性和操作,这对于可读性很好,但不适合纯函数和不可变数据.
如果我打算使用OOP,我是否需要放弃让我的实例持续并保持状态任何时间的想法?就像,每次我想使用一个,我会从商店数据中实例化它,使用我想要的任何方法,然后扔掉它?这可能会消除使用OOP类的很多动力.但如果我保留实例,我会头疼让他们与商店保持同步.
那么,当我试图使用方法并且在我试图使用继承时总是使用合成时,总是使用选择器的答案是什么?具体来说,我的意思是存储和操作Redux存储中保存的数据以用于React组件.如果是这样,它应该放在哪里?连接到选择器?像我建议的那样立即丢弃吗?
为了清楚起见,添加我的用例:我的数据基本上是一个巨大的图形:许多对象具有许多属性和对象之间的大量关系.它只读,但很复杂.我的对象被称为"概念".
在做(可能是愚蠢的)迁移到Redux的决定之前,我使用类来构造和表示概念,概念集和概念之间的关系.我的类包括用于获取概念集的异步api逻辑,有关每个概念的信息,以及与每个概念相关的其他概念的信息.如果用户选择向下钻取,则类将递归地获取并实例化新的概念集.Redux文档推荐了嵌套数据的平面,规范化结构(http://redux.js.org/docs/recipes/reducers/NormalizingStateShape.html),这对于存储来说可能是明智的,但我的OOP模型很适合遍历部分图和东西.我很难使用可能涉及嵌套的选择器和不可变状态,可能包含循环,或者需要对更多数据进行异步调用.
我成功地使用https://redux-observable.js.org/作为api的东西.
也许@Sulthan的答案是正确的:我应该随意在我的Redux应用程序中使用OOP技术.但它似乎仍然很奇怪.我不能保留我的对象,因为如果存储更改(例如,更多数据被提取),我的对象可能会变得陈旧.如果我的对象是嵌套的,但我的存储是规范化的,那么当我需要它时,我会实例化它们(来自选择器),并确保不要让它们保持在...
我正在使用一个将内容转换为ES6代理对象的库,而另一个我认为令人窒息的库是因为我将其中的一个传递给了我(我的代码是荒唐的,我知道),但我不知道如何取消代理对象。
但是我只是傻瓜。代理可以做任何事情!(在下面回答我的问题...)
有没有办法命名分组集?对于每个分组集(根据https://www.postgresql.org/docs/devel/static/queries-table-expressions.html使用汇总或立方体明确定义或生成),我想以某种方式在结果列。这是我正在尝试做的丑陋的即时演示,名称只是分组列的列表:
select *, array_to_string(array_remove(array[case when "A" is null then null else 'A' end,
case when "B" is null then null else 'B' end,
case when "C" is null then null else 'C' end
],null),',') as grouping_set
from (values ('a','b','c'),
('aa','bb','cc'),
('aaa',null,'ccc')) as foo("A","B","C")
group by rollup(1,2,3);
A | B | C | grouping_set
-----+----+-----+--------------
a | b | c | A,B,C
a | b | | A,B
a | | | A
aa | bb | cc | …
Run Code Online (Sandbox Code Playgroud) 这里的答案有很多关于在堆积条形图中订购条形部分的重要信息。在尝试了各种替代方案并获得了我想要的大部分订单之后,NA 不断出现在堆栈的底部,这是我不喜欢的。
ggplot(df, aes(x=time, fill=forcats::fct_rev(factor(able, levels=rev(likely))))) +
geom_bar() +
theme(axis.text.x = element_text(angle = 315, hjust = 0),
plot.margin = margin(10, 40, 10, 10))
Run Code Online (Sandbox Code Playgroud)
x 轴上的 NA 位于末尾,这很棒。总的来说,将 NA 放在最后可能很好。但是对于堆叠的条形图,我认为开始是底部,结束是顶部(因为底部的东西更容易比较。)
(Marimekko 图表可能会更好,但我在尝试让 ggmosaic 和其他各种东西工作一段时间后放弃了。)
编辑:我发现我修改了一些代码来制作 Marimekko 图表(想给予信任,但忘记了我在哪里找到它。)它确实将 NA 放在顶部。
df %>%
group_by(satisfied, time) %>%
summarise(n = n()) %>%
mutate(x.width = sum(n)) %>%
ggplot(aes(x=satisfied, y=n)) +
geom_col(aes(width=x.width, fill=time),
colour = "white", size=2, position=position_fill(reverse = T)) +
geom_text(aes(label=n),
position=position_fill(vjust = 0.5)) +
facet_grid(~ satisfied, space = 'free', scales='free', switch='x') +
#scale_x_discrete(name="a") …
Run Code Online (Sandbox Code Playgroud) 创建 store 时设置初始状态(覆盖 reducer 自己的默认初始状态)的正常方法是向 createStore 提供第二个参数(如何在 redux 中设置初始状态)。但不幸的是,我拼凑了一堆我不太理解的东西(请原谅这个混合的比喻),我不知道把我想要的初始状态放在哪里:
const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
const store = createStore(
rootReducer,
composeEnhancers(
applyMiddleware(...middleware)
)
);
Run Code Online (Sandbox Code Playgroud)
我希望没有人要求查看我的 combineReducers 和中间件构造代码,因为那更令人尴尬。
redux ×2
bar-chart ×1
d3.js ×1
ecmascript-6 ×1
es6-proxy ×1
ggplot2 ×1
git ×1
javascript ×1
oop ×1
postgresql ×1
r ×1
reactjs ×1
reselect ×1
sql ×1