使用Python从JavaScript数组中删除重复项

使用Python从JavaScript数组中删除重复项,javascript,python,arrays,duplicates,unique,Javascript,Python,Arrays,Duplicates,Unique,假设我有一个JavaScript元素数组,它看起来非常类似于: var oui = new Array({ "pfx": "000000", "mask": 24, "desc": "00:00:00 Officially Xerox, but 0:0:0:0:0:0 is more common" },{ "pfx": "000001", "mask": 24, "desc": "Xerox Xerox Corporation" },{

假设我有一个JavaScript元素数组,它看起来非常类似于:

var oui = new Array({
    "pfx": "000000",
    "mask": 24,
    "desc": "00:00:00   Officially Xerox, but 0:0:0:0:0:0 is more common"
},{
    "pfx": "000001",
    "mask": 24,
    "desc": "Xerox  Xerox Corporation"
},{
    "pfx": "000002",
    "mask": 24,
    "desc": "Xerox  Xerox Corporation"
},{
    "pfx": "000003",
    "mask": 24,
    "desc": "Xerox  Xerox Corporation"
},{
    "pfx": "000004",
    "mask": 24,
    "desc": "Xerox  Xerox Corporation"
},{
    "pfx": "000004",
    "mask": 24,
    "desc": "Let's pretend this is a repeat"
   });
现在想象一下,文件非常大,一些“pfx”值在整个数据集中重复。显然,手动消除重复是不可能的,所以我正试图找出以编程方式实现它的最佳方法。如何编写python脚本来读取包含此数据集的.JS文件,以消除重复并删除任何重复项?换句话说,我想读入JS文件,解析数组,并生成另一个具有类似数组的JavaScript文件,但pfx变量只有唯一的值

我已经讨论了另外两个性质类似的堆栈溢出问题,但似乎没有什么适合这种情况。在我的python测试中,我很少能自己获取pfx变量来删除重复项,或者python很难将其作为正确的JSON对象读入(即使没有“var”和“newarray”部分)。我还应该注意到,我在Python中对JS文件中的另一个JavaScript函数进行重复数据消除的原因(我在下面的示例中尝试过这样做)是因为它只会增大必须加载到页面上的JavaScript的大小

在未来,数组可能会继续增长——因此为了避免不必要的JavaScript加载以保持页面响应速度,我认为这是一个可以并且应该离线执行并添加到页面的步骤

为了澄清,这里有一个我试图模拟的网站模型:。这是非常简单的性质

研究:


由于结构不是嵌套的,您可以使用正则表达式匹配数组,然后使用JSON解析它,使用Python中的
过滤器
删除重复对象,然后替换为消除重复的JSON字符串

使用数组文字语法(
[
]
)而不是
新数组
),以保持更整洁(最好不要使用
新数组
):

输出:

var oui = [{"pfx": "000000", "mask": 24, "desc": "00:00:00   Officially Xerox, but 0:0:0:0:0:0 is more common"}, {"pfx": "000001", "mask": 24, "desc": "Xerox  Xerox Corporation"}, {"pfx": "000002", "mask": 24, "desc": "Xerox  Xerox Corporation"}, {"pfx": "000003", "mask": 24, "desc": "Xerox  Xerox Corporation"}, {"pfx": "000004", "mask": 24, "desc": "Xerox  Xerox Corporation"}];

如果可能,您可以考虑将数据存储在单独的标签中,而不是在内嵌的JavaScript中——这将更易于维护。例如,在HTML中,而不是

var oui = [{
    "pfx": "000000",
    "mask": 24,
    "desc": "00:00:00   Officially Xerox, but 0:0:0:0:0:0 is more common"
},{
考虑一下

var oui=JSON.parse(document.querySelector('[data oui').textContent);
console.log(oui);
[{
“pfx”:“000000”,
“面具”:24,
“描述”:“00:00:00正式复印机,但0:0:0:0:0更常见”

}]
如果结构没有嵌套,我会将第一个
{
匹配到最后一个
}
使用正则表达式,然后使用
re.sub
,解析JSON,在Python中执行重复数据消除,并将其字符串化并返回,重复数据消除如果pfx是重复的,会发生什么情况?是否应省略其整个父集合?我曾想过使用正则表达式,但我认为会有一种更简单的方法。此外,我认为它需要比pe更多的逻辑rhaps其他意思如果pfx是重复的,则应发出整个集合。因此,在上面的示例中:
{“pfx”:“000004”,“mask”:24,“desc”:“让我们假设这是一个重复”}
应该省略澄清一下,您是从Python后端提供这些.js文件的吗?是否有理由不通过AJAX将这些数据作为原始JSON发送,并将其硬编码到文件中,但其动态性足以让脚本需要对其进行重复删除?这似乎是一个可能的答案。非常棒的回答!非常感谢!因此,最初我使用了
新数组
插入一个单独的JS文件,而不是使用脚本标记内联HTML。我应该将其内联吗?此外,您是否介意解释为什么我不应该使用
新数组
语法?问题是从服务器向客户端获取动态数据。这取决于您。与ot相比,内联Javascript可能更难使用她的主要方法(网络请求或单独的Javascript文件)但内联Javascript意味着(1)没有缓存问题(客户端不会接收过时的数据,尽管这是可以修复的)(2)无需额外的网络ping,使页面能够更快地处理数据,这无疑是一个小小的优势。有关避免
新阵列的问题,请参阅和
var oui = [{
    "pfx": "000000",
    "mask": 24,
    "desc": "00:00:00   Officially Xerox, but 0:0:0:0:0:0 is more common"
},{