使用 Javascript 从 JSON 中过滤唯一对

dac*_*cot 5 javascript arrays json

我有一个对象数组,每个对象都有一个左右元素。在某些情况下,数组内的左边可能等于右边,对于数组内的不同对象,反之亦然。需要删除这些“重复项”。

例如,我有一个像这样的对象数组......

[
    {"left":"cow","right":"pig"},
    {"left":"horse","right":"pig"},
    {"left":"rabbit","right":"pig"},
    {"left":"bird","right":"pig"},
    {"left":"bear","right":"pig"},
    {"left":"cow","right":"bird"},
    {"left":"horse","right":"bird"},
    {"left":"pig","right":"bird"},
    {"left":"cow","right":"horse"},
    {"left":"bird","right":"horse"},
    {"left":"pig","right":"horse"},
    {"left":"rabbit","right":"horse"},
    {"left":"horse","right":"cow"},
    {"left":"pig","right":"cow"},
    {"left":"bird","right":"cow"},
    {"left":"bear","right":"cow"},
    {"left":"horse","right":"rabbit"},
    {"left":"pig","right":"rabbit"},
    {"left":"bear","right":"rabbit"},
    {"left":"pig","right":"bear"},
    {"left":"rabbit","right":"bear"},
    {"left":"cow","right":"bear"}
]
Run Code Online (Sandbox Code Playgroud)

我需要将它过滤到唯一的对,就像这样......

[
    {"left":"cow","right":"pig"},
    {"left":"horse","right":"pig"},
    {"left":"rabbit","right":"pig"},
    {"left":"bird","right":"pig"},
    {"left":"bear","right":"pig"},
    {"left":"cow","right":"bird"},
    {"left":"horse","right":"bird"},
    {"left":"cow","right":"horse"},
    {"left":"rabbit","right":"horse"},
    {"left":"bear","right":"cow"},
    {"left":"bear","right":"rabbit"}
]
Run Code Online (Sandbox Code Playgroud)

使用javascript。

TbW*_*321 4

您将需要使用 Array.prototype.filter 以及一个基本对象来跟踪哪些对已被触摸。

var input = [ ... ];
var pairs = {};
var output = input
    .filter(function(item) {
        if (pairs[item.left] == item.right ||
            pairs[item.right] == item.left)
            return false;
        pairs[item.left] = item.right;
        return true;
    });
Run Code Online (Sandbox Code Playgroud)