gpt4 book ai didi

javascript - 在多维 javascript 数组中查找唯一的条目,顺序重要取决于级别

转载 作者:行者123 更新时间:2023-11-28 14:59:29 25 4
gpt4 key购买 nike

在多维 javascript 数组中查找所有唯一的第一级条目的最优雅的解决方案是什么?只有一个重要的规则:条目的顺序仅在第一级重要,但在第二级不重要

例如,对于以下数组,脚本应返回 4 个唯一条目(第一个、第三个、第四个和第五个):

[
[ [],[22],[1,13,17],[12],[] ],
[ [],[22],[17,13,1],[12],[] ],
[ [],[12],[1,13,17],[22],[] ],
[ [11],[12],[13],[14],[15] ],
[ [15],[14],[13],[12],[11] ]
]
PS。也可以使用 jQuery。

最佳答案

首先,这是一个可用的 JSFiddle 供您使用:http://jsfiddle.net/missyalyssi/ro8o94nk/

给定一个输入数组,函数 findUnique 将返回一个数组,其中包含根据您的定义唯一的项目。因此,例如:

[[8],[1,2,3],[9]] 是 [[8], [3,1,2], [9]] 的重复项,但不是 [[ 的重复项9]、[3,1,2]、[8]]

我写这篇文章的主要目的是让它易于阅读和理解。

function findUnique(input) {
let found = [];
let uniqueEls = new Set();
let hasDup = true;
for (let element of input) {
hasDup = found.length &&
found.every((el) => {return deepEqualsNaive(el, element)});
if (hasDup) {
uniqueEls.delete(element);
continue;
}
found.push(element);
uniqueEls.add(element);
}
return [...uniqueEls];
}

该函数使用deepEqualsNaive来确定两个数组是否相等。由于 javascript 中的对象相等意味着数组将指向相同的内存位置,因此我们需要构建自己的函数来为我们所说的 equal 返回 true。在这里,所谓相等是指它们具有相同的元素,即使它们没有指向相同的内存位置或以相同的顺序出现。

为了便于阅读,我以递归方式编写了此函数我不知道您使用此函数的上下文。如果您可能溢出堆栈,则使用迭代版本。

以下是一些示例输入以及我们的期望:

deepEqualsNaive([ [],[22],[1,13,17],[12],[] ], [ [],[22],[17,13,1],[12],[] ]) => true

deepEqualsNaive([ [],[22],[17,13,1],[12],[] ], [ [],[12],[1,13,17],[22],[] ]) => false

deepEqualsNaive([ [],[22],[1,13,17],[12],[] ], [ [],22,[17,13,1],[12],[] ]) => false

功能:

function deepEqualsNaive (input, clone) {
if (!Array.isArray(input) || !Array.isArray(clone)) return false;
if (input.length !== clone.length) return false;
var result = 0;
for (let elIdx = 0; elIdx < input.length; elIdx++) {
var tryDeep = true;
if (Array.isArray(input[elIdx])) tryDeep = deepEqualsNaive(input[elIdx], clone[elIdx]);
if (!tryDeep) return false;
result ^= input[elIdx];
result ^= clone[elIdx];
}
return result === 0;
}

关于javascript - 在多维 javascript 数组中查找唯一的条目,顺序重要取决于级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41667021/

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