gpt4 book ai didi

javascript - Map/Set 维护唯一的数组数组,Javascript

转载 作者:行者123 更新时间:2023-12-02 16:24:27 24 4
gpt4 key购买 nike

我正在尝试构建唯一的数组数组,这样每当我要添加新数组时,仅当集合中尚不存在该数组时才添加它

例如存储 [1,1,2] 的所有唯一排列

实际:[[1,1,2],[1,2,1],[1,1,2],[1,2,1],[2,1,1],[ 2,1,1]]
预期:[[1,1,2],[1,2,1],[2,1,1]]

我尝试过的方法:

  1. Array.Filter:不起作用,因为数组是对象,并且 uniqueArrComparer 中的每个值都是对该数组元素的唯一对象引用。
function uniqueArrComparer(value, index, self) {
return self.indexOf(value) === index;
}

result.filter(uniqueArrComparer)
  • Set/Map:以为我可以构建一个唯一的数组集,但它不起作用,因为 Set 内部使用严格相等比较器 (===),它将考虑中的每个数组此案独一无二。
    We cannot customize object equality for JavaScript Set

  • 将每个数组元素作为字符串存储在 Set/Map/Array 中,并构建一个唯一字符串数组。最后使用唯一字符串数组构建数组数组。这种方法可行,但看起来不像有效的解决方案。

  • 使用 Set 的工作解决方案

    let result = new Set();

    // Store [1,1,2] as "1,1,2"
    result.add(permutation.toString());

    return Array.from(result)
    .map(function(permutationStr) {

    return permutationStr
    .split(",")
    .map(function(value) {

    return parseInt(value, 10);
    });
    });

    这个问题更像是一个学习练习,而不是任何应用程序问题。

    最佳答案

    一种方法是将数组转换为 JSON 字符串,然后使用 Set 获取唯一值,然后再次转换回来

    var arr = [
    [1, 1, 2],
    [1, 2, 1],
    [1, 1, 2],
    [1, 2, 1],
    [2, 1, 1],
    [2, 1, 1]
    ];

    let set = new Set(arr.map(JSON.stringify));
    let arr2 = Array.from(set).map(JSON.parse);

    console.log(arr2)

    关于javascript - Map/Set 维护唯一的数组数组,Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43772320/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com