如何计算重复的数组元素?(javascript)

如何计算重复的数组元素?(javascript),javascript,jquery,Javascript,Jquery,我正在尝试用JavaScript、XML和jQuery创建一个基于XML的菜单。我已经成功地获得了菜单的类别,但还不能生成类别中的项目 我的脚本如下所示,在本线程的后面部分,我已经询问了有关此代码的建议: var animalsXMLurl = 'http://dl.dropboxusercontent.com/u/27854284/Stuff/Online/XML_animals.xml'; $(function() { $.ajax({ url: animalsXML

我正在尝试用JavaScript、XML和jQuery创建一个基于XML的菜单。我已经成功地获得了菜单的类别,但还不能生成类别中的项目

我的脚本如下所示,在本线程的后面部分,我已经询问了有关此代码的建议:

var animalsXMLurl = 'http://dl.dropboxusercontent.com/u/27854284/Stuff/Online/XML_animals.xml';
$(function() {
    $.ajax({
        url: animalsXMLurl, // name of file you want to parse
        dataType: "xml",
        success: function parse(xmlResponse) {

            var data = $("item", xmlResponse).map(function() {
                return {
                    id: $("animal_id", this).text(),
                    title: $("animal_title", this).text(),
                    url: $("animal_url", this).text(),
                    category: $("animal_category", this).text().split('/'),
                };
            }).get();
            var first_item = category_gen(data, 0);
            $('ul.w-nav-list.level_2').append(first_item);
            var categnumber = new Array();
            for (i = 1; i <= data.length; i++) //for splitting id, and getting 0 for category_number (1 or 2 or 3...and so on)
            {
                categnumber[i] = data[i].id.split('_');
                console.log(categnumber[i][0]);
                for (j = 1; j <= data.length; j++) //appending via a function.
                {
                    var data_text = category_or_animal(data, categnumber, j);
                    console.log(data_text);
                    $('ul.w-nav-list.level_2').append(data_text);
                }
            }

            function category_or_animal(d, catg, k) {
                var catg1 = new Array();
                var catg2 = new Array();
                var catg1 = d[k].id.split('_');
                if (d[k - 1]) {
                    var catg2 = d[k - 1].id.split('_');
                    //if(d[k-1].id)
                    if (catg1[0] != catg2[0])
                        return category_gen(d, k);
                } else
                    return '</ul>' + animal_gen(d, k);
            }
            function category_gen(d, z) {
                var category_var = '<li class="w-nav-item level_2 has_sublevel"><a class="w-nav-anchor level_2" href="javascript:void(0);"><span class="w-nav-title">' + d[z].category + '</span><span class="w-nav-arrow"></span></a><ul class="w-nav-list level_3">';
                return category_var;
            }

            function animal_gen(d, z) {
                var animal_var = '<li class="w-nav-item level_3"><a class="w-nav-anchor level_3" href="animals/' + d[z].url + '"><span class="w-nav-title">' + d[z].title + '</span><span class="w-nav-arrow"></span></a></li>';
                return animal_var;
            }

        }, error: function() {
            console.log('Error: Animals info xml could not be loaded.');
        }
    });
});
var animalsXMLurl='0http://dl.dropboxusercontent.com/u/27854284/Stuff/Online/XML_animals.xml';
$(函数(){
$.ajax({
url:animalsXMLurl,//要分析的文件名
数据类型:“xml”,
成功:函数解析(xmlResponse){
var data=$(“项”,xmlResponse).map(函数(){
返回{
id:$(“动物id”,this).text(),
标题:$(“动物标题”,this).text(),
url:$(“动物url”,this).text(),
类别:$(“动物_类别”,this).text().split('/'),
};
}).get();
var第一项=类别生成(数据,0);
$('ul.w-nav-list.level_2')。追加(第一项);
var categnumber=新数组();

对于(i=1;i,很难说提供的JSFIDLE正在尝试做什么

这是我的最佳尝试,我使用JQuery将XML解析为类别并生成项目列表

“严格使用”;
var animalsXMLurl=http://dl.dropboxusercontent.com/u/27854284/Stuff/Online/XML_animals.xml';
$(函数(){
var$menu=$(“#menu”);
$.ajax({
url:animalsXMLurl,//要分析的文件名
数据类型:“xml”,
成功:HandlerResponse,
错误:函数(){
log('错误:无法加载动物信息xml');
}
});
函数handleResponse(xmlResponse){
var$data=parseResponse(xmlResponse);
createMenu($data);
}
函数parseResponse(xmlResponse){
return$(“item”,xmlResponse).map(函数(){
var$this=$(this);
返回{
id:$this.find(“animal_id”).text(),
标题:$this.find(“animal_title”).text(),
url:$this.find(“动物url”).text(),
类别:$this.find(“动物类别”).text()
};
});
}
函数createMenu($data){
变量类别={};
$data.each(函数(i,数据项){
if(类别的类型[dataItem.category]=“未定义”){
类别[dataItem.category]=[];
}
类别[dataItem.category].push(dataItem);
});
$.each(类别、功能)(类别、类别项目){
var categoryItems=类别[类别];
$menu.append($('').text(category));
$menu.append(createList(categoryItems));
});
}
函数createList(categoryItems){
var$list=$(“
    ”); $。每个(类别项、函数(i、数据项){ $list.append(createItem(dataItem)); }); 返回$list; } 函数createItem(dataItem){ 返回$(“
  • ”).text(dataItem.title); } });
您无需使用任何for/while循环或forEach即可解决此问题

function myCounter(inputWords) {        
    return inputWords.reduce( (countWords, word) => {
        countWords[word] = ++countWords[word] || 1;
        return countWords;
    }, {});
}

希望对您有所帮助!

可能的重复在这里我已经阅读了该页面,该页面上的计数代码用于正在排序然后正在计数的数组…我如何使用该计数函数返回
category\u gen()+animals\u gen())
?你能看一下xml和JSFIDLE吗?谢谢!嗨!我编辑了你的代码,它工作得非常好!!下面是我的代码版本的JSFIDLE线程:
"use strict";

var animalsXMLurl = 'http://dl.dropboxusercontent.com/u/27854284/Stuff/Online/XML_animals.xml';

$(function () {

    var $menu = $('#menu');

    $.ajax({
        url: animalsXMLurl, // name of file you want to parse
        dataType: "xml",
        success: handleResponse,
        error: function () {
            console.log('Error: Animals info xml could not be loaded.');
        }
    });

    function handleResponse(xmlResponse) {
        var $data = parseResponse(xmlResponse);
        createMenu($data);
    }

    function parseResponse(xmlResponse) {
        return $("item", xmlResponse).map(function () {
            var $this = $(this);
            return {
                id: $this.find("animal_id").text(),
                title: $this.find("animal_title").text(),
                url: $this.find("animal_url").text(),
                category: $this.find("animal_category").text()
            };
        });
    }

    function createMenu($data) {
        var categories = {};
        $data.each(function (i, dataItem) {
            if (typeof categories[dataItem.category] === 'undefined') {
                categories[dataItem.category] = [];
            }
            categories[dataItem.category].push(dataItem);
        });
        $.each(categories, function (category, categoryItems) {
            var categoryItems = categories[category];
            $menu.append($('<h2>').text(category));
            $menu.append(createList(categoryItems));
        });
    }

    function createList(categoryItems) {
        var $list = $('<ul>');
        $.each(categoryItems, function (i, dataItem) {
            $list.append(createItem(dataItem));
        });
        return $list;
    }

    function createItem(dataItem) {
        return $('<li>').text(dataItem.title);
    }
});
function myCounter(inputWords) {        
    return inputWords.reduce( (countWords, word) => {
        countWords[word] = ++countWords[word] || 1;
        return countWords;
    }, {});
}