Javascript 在数组中计算Razor、Umbraco中相同值的项目数

Javascript 在数组中计算Razor、Umbraco中相同值的项目数,javascript,jquery,razor,umbraco,Javascript,Jquery,Razor,Umbraco,我有一系列的记录 Model.Categories = ["apple", "banana", "apple", "orange"] 从这个数组中,我一个接一个地显示记录 @foreach (var category in Model.Categories) { <a href="@Url.ArticulateCategoryUrl(Model, category)">@category</a>

我有一系列的记录

Model.Categories = ["apple", "banana", "apple", "orange"]
从这个数组中,我一个接一个地显示记录

 @foreach (var category in Model.Categories)
            {
                <a href="@Url.ArticulateCategoryUrl(Model, category)">@category</a>                   
            }

像这样的剃须刀可以帮助我如何实现这一点

要做到这一点,我们需要在模型中创建一个方法,该方法将返回类别及其出现的字典。请查找以下可用于返回词典的方法

public Dictionary<string,int> CountArray()
    {
        Dictionary<string, int> countArr = new Dictionary<string, int>();

        foreach (var category in Categories)
        {
            if(countArr.ContainsKey(category))
            {
                countArr[category] = countArr[category] + 1;
            }
            else
            {
                countArr[category] = 1;
            }
        }
        return countArr;
    }
公共字典CountArray()
{
Dictionary countArr=新字典();
foreach(类别中的var类别)
{
if(计数容器(类别))
{
countArr[category]=countArr[category]+1;
}
其他的
{
countArr[类别]=1;
}
}
返回计数器;
}
现在在cshtml文件中创建一个变量,并分配这个从模型返回的值。 在foreach循环中使用此变量。 我想这会帮助你解决你的问题

我真的不建议这种方法。但是如果你需要帮助,请找到剃须刀代码

@{ Dictionary<string, int> countarry = new Dictionary<string, int>();}
@foreach (var category in Model.Categories)
{
    if (countarry.ContainsKey(category))
    {
        countarry[category] = countarry[category] + 1;
    }
    else
    {
        countarry[category] = 1;
    }
}
@foreach (var categoryName in countarry.Keys)
            {
if(countarry[categoryName] > 1)
        <a href="@Url.ArticulateCategoryUrl(Model, categoryName)">@categoryName - (@countarry[categoryName])</a>
else
<a href="@Url.ArticulateCategoryUrl(Model, categoryName)">@categoryName</a>
    }
@{Dictionary countarry=new Dictionary();}
@foreach(Model.Categories中的var类别)
{
if(国家集装箱(类别))
{
countarry[类别]=countarry[类别]+1;
}
其他的
{
countarry[类别]=1;
}
}
@foreach(countarry.key中的变量categoryName)
{
if(countarry[categoryName]>1)
其他的
}
我希望这就是您所期望的。

我有一个简单的解决方案

var fruits = ["apple","coconut","apple","banana","papaya"];
var sortFruits=[]; 用于(水果中的水果){

} console.log(sortFruits)

不确定它是否是您所说的“剃须刀代码”,但为什么不使用Linq GroupBy呢

以下代码在浏览器上生成预期的输出

@foreach (var category in categories.GroupBy(k => k))
{
    <a>@category.Key@(category.Count() > 1 ? $" - ({category.Count()})" : "")</a><br/>
}
@foreach(categories.GroupBy中的变量类别(k=>k))
{
@category.Key@(category.Count()>1?$“-({category.Count()})”:”)
}
上述示例适用于Razor 3.0.0.0和.Net franework 4.6.1(C#6.0)

上面的代码是尝试按问题中的预期输出后的结果。如果让它更简单,可能它可以在早期版本中工作

@foreach (var category in categories.GroupBy(k => k))
{
    <a>@category.Key - @category.Count()</a><br/>
}
@foreach(categories.GroupBy中的变量类别(k=>k))
{
@category.Key-@category.Count()
}
我知道了。但理想情况下,我们不应该在razor文件中编写更多的代码。这种业务逻辑应该驻留在模型中。为什么我们需要在Razor中编写此代码。我们有这样做的具体要求吗?嗨,我从来没有在翁布拉科使用过模型,所以只有我在寻找杜松子酒Razor@GayathriMohan我已经更新了razor代码的答案。检查一次,让我知道你好,谢谢你的剃须刀代码,但结果显示,苹果(1),香蕉(1),苹果(1),橙色(1),像这个代替苹果(2),我们可以添加如果条件计数。你能告诉我你的值是否大于1吗?如果大于1,那么你只需要澄清一下,然后我们可以根据以下情况进行更新:我在Razorhi中查看,它在你的回答中没有显示计数。删除后有$symbol抛出错误,也没有显示计数$用于c#字符串插值。不要只是删除$。将此$“-({category.Count()})”替换为(@category.Count())。这应该行啊,它在你的环境中不起作用?这可能是因为Razor和/或.Net framework的版本不同。你的目标是哪个版本?在我的例子中,Razor是3.0.0.0,目标框架是.Net franework 4.6.1(C#6.0)
@foreach (var category in categories.GroupBy(k => k))
{
    <a>@category.Key@(category.Count() > 1 ? $" - ({category.Count()})" : "")</a><br/>
}
@foreach (var category in categories.GroupBy(k => k))
{
    <a>@category.Key - @category.Count()</a><br/>
}