javascript - 当重复时显示 json 对象数组的值一次

标签 javascript jquery json

我正在尝试从 json 数据形成一个列表,请参阅 example我想要的是,当出现重复值时,它只会向我显示一次该值(2x Martini 玻璃,我希望它只返回列表中的一个),但保留数组不变,即仍然希望能够保存所有数组中的值。

肯定有一个简单的方法来实现这一点,但我没有找到它......

var data = {
    "cocktails": [{
        "name": "Bloody Mary",
            "glass": "longdrink",
            "ingredients": {
            "main": "vodka",
                "secondary": "tomato juice",
                "addition": "tabasco"
        }
    }, {
        "name": "Daiquiri",
            "glass": "martini glass",
            "ingredients": {
            "main": "white rum",
                "secondary": "lime juice",
                "addition": "sugar syrup"
        }
    }, {
        "name": "Martini",
            "glass": "martini glass",
            "ingredients": {
            "main": "gin",
                "secondary": "vermout",
                "addition": "olive"
        }
    }]
}

$(data.cocktails).each(function () {
    var output = "<ul><li>" + this.glass + "</li></ul>";
    $('#placeholder').append(output);
});

最佳答案

创建一个空数组:

var glasses = [];

将所有眼镜推到它上面。

data.cocktails.forEach(function (el) {
  glasses.push(el.glass);
});

创建一个重复数据删除的眼镜阵列。这会使眼镜阵列完好无损,以便您可以再次使用它。

var dedupedGlasses = glasses.filter(function(elem, pos) {
  return glasses.indexOf(elem) == pos;
});

使用 join 创建 HTML 列表。

var html = '<ul><li>' + dedupedGlasses.join('</li><li>') + '</li></ul>';

并添加到页面。

$('#placeholder').append(html);

Demo

你可以使用一些东西like this获取每种眼镜类型的计数:

function getCount(arr) {
  return arr.reduce(function(m, e){
    m[e] = (+m[e]||0)+1; return m
  }, {});
}

console.log(getCount(glasses)); // { longdrink=1, martini glass=2 }

关于javascript - 当重复时显示 json 对象数组的值一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21702541/

相关文章:

json - 存储和检索 RSA 加密 key

javascript - 在 jQuery 中切换,隐藏第一个段落

java - 更改 JSON 格式

javascript - 为什么我的 jQuery 函数只打开一个链接而不打开代码中列出的其他链接?

javascript - 如何检查你是否在jquery mobile中的某个页面上

jquery - 如何在jquery中运行一个函数

jquery - 在 ASP .Net MVC 4 页面上使用 jQuery 更改背景图像

javascript - 如何在 JavaScript 中检查文件中是否存在 JSON 对象

javascript - 如何在 Backbone.js 中追加后添加类?

javascript - 在 javascript 中实现队列的最佳方式?