You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在jQuery中获取多数组中的唯一值?

获取数组中的唯一值解决方案

问题描述

这是我的数组对应的截图:
数组内容截图

我希望从中提取shape对应的唯一值,得到类似 ['round', 'marquees', 'princess', 'oval'] 的结果。

当前使用的代码如下:

var array = [];

$.each(storeKeyValue, function (index, diamond) {
    if (index == "shape") {
        // console.log(diamond)
        array.push(diamond);
        $(".shapes").append('<option value="' + diamond + '">' + diamond + "</option>");
    } else if (index == "color") {
        // console.log(diamond)
        $(".colors").append('<option value="' + diamond + '">' + diamond + "</option>");
    } else if (index == "quality") {
        // console.log(diamond)
        $(".quality").append('<option value="' + diamond + '">' + diamond + "</option>");
    }
});

console.log(array);

$(document).ready(function () {
    $(document).on("change", ".shapes", function (e) {
        var shape = $(this).val();
        if (storeKeyValue.shape === shape) {
            $.each(storeKeyValue, function (index, size) {
                if (index == "size") {
                    $(this).siblings(".size_diamond").empty();
                    $(".size").append('<option value="' + size + '">' + size + "</option>");
                }
            });
        }
    });
});

解决方案

方法1:用ES6 Set自动去重

利用Set数据结构自动去重的特性,收集shape值后转成数组即可:

var uniqueShapes = new Set();

$.each(storeKeyValue, function (index, diamond) {
    if (index == "shape") {
        uniqueShapes.add(diamond);
        $(".shapes").append('<option value="' + diamond + '">' + diamond + "</option>");
    } else if (index == "color") {
        $(".colors").append('<option value="' + diamond + '">' + diamond + "</option>");
    } else if (index == "quality") {
        $(".quality").append('<option value="' + diamond + '">' + diamond + "</option>");
    }
});

// 将Set转为数组
var array = Array.from(uniqueShapes);
console.log(array);

方法2:手动判断去重(兼容旧环境)

如果需要兼容ES6之前的运行环境,可以在添加元素前检查是否已存在:

var array = [];

$.each(storeKeyValue, function (index, diamond) {
    if (index == "shape") {
        // 检查值是否已在数组中,不存在再添加
        if (!array.includes(diamond)) {
            array.push(diamond);
            $(".shapes").append('<option value="' + diamond + '">' + diamond + "</option>");
        }
    } else if (index == "color") {
        $(".colors").append('<option value="' + diamond + '">' + diamond + "</option>");
    } else if (index == "quality") {
        $(".quality").append('<option value="' + diamond + '">' + diamond + "</option>");
    }
});

console.log(array);

额外优化说明

两种方法都能避免重复生成相同的<option>标签,减少DOM操作,提升页面性能。


内容的提问来源于stack exchange,提问作者kuldip domaddiya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 04:20:58