我有这样的结构:
[{
description: 'Beef Stew',
complete: false,
tasks: [{
description: 'Cut vegetables',
complete: false,
tasks: [{
description: 'Dice carrots',
complete: false
}, {
description: 'Mince Garlic',
complete: false
}, {
description: 'Prepare potatoes',
complete: false,
tasks: [{
description: 'Peel potatoes',
complete: false
}, {
description: 'Cut potatoes',
complete: false
}]
}]
}]
}]
在这种情况下,我正在寻找第一次出现没有完成任务的元素。在这种情况下,这意味着它应该是{ description: 'Dice carrots', completed: false }
。这是我写的基本内容。 codepen here too
function next(steps) {
return steps.reduce((r, step) => {
return (step.tasks && step.tasks.length > 0 && !step.complete) ? next(step.tasks) : step;
}, []);
}
这确实有一个很深的步骤,但它最终得到最后步骤。我怎样才能制作出能够获得第一个算法的算法?
答案 0 :(得分:1)
mozilla网站提供了这个的polyfill实现。
将其应用于您的问题:
[HtmlTargetElement("input", Attributes = nameof(Wrap) + ", asp-for")]
[HtmlTargetElement("select", Attributes = nameof(Wrap) + ", asp-for")]
public class FormGroupWrapperTagHelper : TagHelper
{
public FormGroupWrapperTagHelper(IHtmlGenerator generator)
{
Generator = generator;
}
[HtmlAttributeNotBound]
[ViewContext]
public ViewContext ViewContext { get; set; }
protected IHtmlGenerator Generator { get; }
public ModelExpression AspFor { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
var generateValidationMessage = Generator.GenerateValidationMessage(ViewContext,
AspFor.Name,
message: null,
tag: null,
htmlAttributes: null);
.....
}
答案 1 :(得分:0)
我在Steps
课程中得到了一个非常好的解决方案,因为如果有人在将来寻找答案的话。
class Steps {
constructor(steps) {
this.steps = steps;
this.current = steps;
}
next(steps=this.steps) {
for(let step of steps) {
if (step.tasks instanceof Array && !step.complete) {
return this.next(step.tasks);
}
return this.current = step;
}
}
}
这允许我递归地前进。