Есть ли простой способ, с помощью которого я могу фильтровать данные JSON на основе различных условий - PullRequest
0 голосов
/ 08 октября 2019

Я получаю следующие данные в ответ от одного из моих веб-сервисов. Я хочу отфильтровать данные на основе нескольких комбинаций разного значения. какой самый простой способ сделать это, чтобы он влиял на производительность моего веб-сервиса

Данные: Я получаю массив объектов

[
    {
        "source": "9606.ENSP00000000233",
        "target": "9606.ENSP00000366563",
        "relationship": "ON_INTERACTION_WITH",
        "relationshipdetails": {
            "database4": "0",
            "database3": "0",
            "coexpression2": "42",
            "coexpression3": "42",
            "experimental": "174",
            "database2": "0",
            "combinedscore3": "298",
            "combinedscore4": "298",
            "experimental2": "174",
            "combinedscore": "298",
            "database": "0",
            "combinedscore2": "298",
            "experimental3": "174",
            "experimental4": "174",
            "coexpression4": "42",
            "textmining3": "184",
            "coexpression": "42",
            "textmining4": "184",
            "textmining2": "184",
            "textmining": "184"
        }
    },
    {
        "source": "9606.ENSP00000000233",
        "target": "9606.ENSP00000402551",
        "relationship": "ON_INTERACTION_WITH",
        "relationshipdetails": {
            "database4": "0",
            "database3": "0",
            "coexpression2": "148",
            "coexpression3": "148",
            "experimental": "138",
            "database2": "0",
            "combinedscore3": "247",
            "combinedscore4": "247",
            "experimental2": "138",
            "combinedscore": "247",
            "database": "0",
            "combinedscore2": "247",
            "experimental3": "138",
            "experimental4": "138",
            "coexpression4": "148",
            "textmining3": "57",
            "coexpression": "148",
            "textmining4": "57",
            "textmining2": "57",
            "textmining": "57"
        }
    },
    {
        "source": "9606.ENSP00000000233",
        "target": "9606.ENSP00000386239",
        "relationship": "ON_INTERACTION_WITH",
        "relationshipdetails": {
            "database4": "0",
            "database3": "0",
            "coexpression2": "49",
            "coexpression3": "49",
            "experimental": "120",
            "database2": "0",
            "combinedscore3": "190",
            "combinedscore4": "190",
            "experimental2": "120",
            "combinedscore": "190",
            "database": "0",
            "combinedscore2": "190",
            "experimental3": "120",
            "experimental4": "120",
            "coexpression4": "49",
            "textmining3": "110",
            "coexpression": "49",
            "textmining4": "110",
            "textmining2": "110",
            "textmining": "110"
        }
    }
]

условия: where textmining >/</= 100 and coexpression >/</= 30 and combinedscore >/</= 250 данныедолжен быть отфильтрован на основе 5 значений фильтра (текстовое копирование, совместное выражение, экспериментальное, база данных и комбинированная оценка) с большим / равным / меньшим, чем условие, и все это должно использоваться для ввода.

Ответы [ 4 ]

0 голосов
/ 08 октября 2019

С учетом входного объекта input и условий textmining > 100 и coexpression < 30:

var result = input .filter (entry => entry ["relationshipdetails"] ["textmining"] > 100) .filter (entry => entry ["relationshipdetails"] ["coexpression"] < 30); // etc...

(см. документы MDN по Array.prototype.filter.)

0 голосов
/ 08 октября 2019

const arr = [
    {
        "source": "9606.ENSP00000000233",
        "target": "9606.ENSP00000366563",
        "relationship": "ON_INTERACTION_WITH",
        "relationshipdetails": {
            "database4": "0",
            "database3": "0",
            "coexpression2": "42",
            "coexpression3": "42",
            "experimental": "174",
            "database2": "0",
            "combinedscore3": "298",
            "combinedscore4": "298",
            "experimental2": "174",
            "combinedscore": "298",
            "database": "0",
            "combinedscore2": "298",
            "experimental3": "174",
            "experimental4": "174",
            "coexpression4": "42",
            "textmining3": "184",
            "coexpression": "42",
            "textmining4": "184",
            "textmining2": "184",
            "textmining": "184"
        }
    },
    {
        "source": "9606.ENSP00000000233",
        "target": "9606.ENSP00000402551",
        "relationship": "ON_INTERACTION_WITH",
        "relationshipdetails": {
            "database4": "0",
            "database3": "0",
            "coexpression2": "148",
            "coexpression3": "148",
            "experimental": "138",
            "database2": "0",
            "combinedscore3": "247",
            "combinedscore4": "247",
            "experimental2": "138",
            "combinedscore": "247",
            "database": "0",
            "combinedscore2": "247",
            "experimental3": "138",
            "experimental4": "138",
            "coexpression4": "148",
            "textmining3": "57",
            "coexpression": "148",
            "textmining4": "57",
            "textmining2": "57",
            "textmining": "57"
        }
    },
    {
        "source": "9606.ENSP00000000233",
        "target": "9606.ENSP00000386239",
        "relationship": "ON_INTERACTION_WITH",
        "relationshipdetails": {
            "database4": "0",
            "database3": "0",
            "coexpression2": "49",
            "coexpression3": "49",
            "experimental": "120",
            "database2": "0",
            "combinedscore3": "190",
            "combinedscore4": "190",
            "experimental2": "120",
            "combinedscore": "190",
            "database": "0",
            "combinedscore2": "190",
            "experimental3": "120",
            "experimental4": "120",
            "coexpression4": "49",
            "textmining3": "110",
            "coexpression": "49",
            "textmining4": "110",
            "textmining2": "110",
            "textmining": "110"
        }
    }
] ; 

console.log(arr.filter(entry => entry.relationshipdetails.textmining > 110 ))

Использовать фильтр. В моем примере я фильтрую все, что меньше 110. используя Array.prototype.filter Вы можете применить его к остальным, используя приведенный мной пример

В идеале вы должны сохранить эти результаты впеременная. Ради объяснения я просто регистрирую это.

0 голосов
/ 08 октября 2019

Вы можете использовать фильтр и просто добавить необходимое сравнение и логическое, чтобы вернуть истину или ложь

var data = [
    {
        "source": "9606.ENSP00000000233",
        "target": "9606.ENSP00000366563",
        "relationship": "ON_INTERACTION_WITH",
        "relationshipdetails": {
            "database4": "0",
            "database3": "0",
            "coexpression2": "42",
            "coexpression3": "42",
            "experimental": "174",
            "database2": "0",
            "combinedscore3": "298",
            "combinedscore4": "298",
            "experimental2": "174",
            "combinedscore": "298",
            "database": "0",
            "combinedscore2": "298",
            "experimental3": "174",
            "experimental4": "174",
            "coexpression4": "42",
            "textmining3": "184",
            "coexpression": "42",
            "textmining4": "184",
            "textmining2": "184",
            "textmining": "184"
        }
    },
    {
        "source": "9606.ENSP00000000233",
        "target": "9606.ENSP00000402551",
        "relationship": "ON_INTERACTION_WITH",
        "relationshipdetails": {
            "database4": "0",
            "database3": "0",
            "coexpression2": "148",
            "coexpression3": "148",
            "experimental": "138",
            "database2": "0",
            "combinedscore3": "247",
            "combinedscore4": "247",
            "experimental2": "138",
            "combinedscore": "247",
            "database": "0",
            "combinedscore2": "247",
            "experimental3": "138",
            "experimental4": "138",
            "coexpression4": "148",
            "textmining3": "57",
            "coexpression": "148",
            "textmining4": "57",
            "textmining2": "57",
            "textmining": "57"
        }
    },
    {
        "source": "9606.ENSP00000000233",
        "target": "9606.ENSP00000386239",
        "relationship": "ON_INTERACTION_WITH",
        "relationshipdetails": {
            "database4": "0",
            "database3": "0",
            "coexpression2": "49",
            "coexpression3": "49",
            "experimental": "120",
            "database2": "0",
            "combinedscore3": "190",
            "combinedscore4": "190",
            "experimental2": "120",
            "combinedscore": "190",
            "database": "0",
            "combinedscore2": "190",
            "experimental3": "120",
            "experimental4": "120",
            "coexpression4": "49",
            "textmining3": "110",
            "coexpression": "49",
            "textmining4": "110",
            "textmining2": "110",
            "textmining": "110"
        }
    }
]

var filtered = data.filter((entry) => {
  if (!('relationshipdetails' in entry)) return false
  return (entry.relationshipdetails.textmining > 100 && entry.relationshipdetails.coexpression < 50)
});

console.log(filtered);
0 голосов
/ 08 октября 2019

Это зависит от того, какую specific логику вы хотите execute для массива.
, но обычно для получения значений и для сравнения значений я думаю, что лучшим вариантом будут циклы.

Мудрость исполнения

см. подробнее здесь

performance analysis of for loop

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...