Фильтрация лог c для массива объектов по вкладкам - PullRequest
0 голосов
/ 09 июля 2020

У меня есть 3 вкладки tabA, tabB, tab C, и у меня есть общий массив объектов, который отображается на всех этих 3 вкладках, т.е.

`    data=[{value:"someValue (tabA) RO"},{value:"someValue (tabA) RW" },
           {value:"someValue (tabB) RO"},{value:"someValue (tabB) RW" } , 
           {value:"someValue (tabC) RO"},{value:"someValue (tabC) RW" }]` 

критерии фильтрации заключаются в том, что когда я нахожусь в tabA он должен отображать как значения RO, Rw tabA, так и только значения RO других вкладок, точно так же, если я нахожусь в tabB, он должен отображать значения RO, RW вкладки tabB и только значения RO других вкладок, то же самое для остальной части вкладки. может кто-нибудь дать мне логи c.

1 Ответ

0 голосов
/ 09 июля 2020

Не уверен, о какой структуре данных вы говорите. Я предполагаю, что это выглядит так, как показано ниже.

const data = [
    { value: "tabAsomeValueRO (tabA) RO" }, 
    { value: "tabAsomeValueRW (tabA) RW" },
    { value: "tabBsomeValueRO (tabB) RO" }, 
    { value: "tabBsomeValueRW (tabB) RW" },
    { value: "tabCsomeValueRO (tabC) RO" }, 
    { value: "tabCsomeValueRW (tabC) RW" }
]

/**
 * convert to the following object
   {
    tabA: {
        RO: "tabAsomeValueRO",
        RW: "tabAsomeValueRW",
    },
    tabB: {
        RO: "tabBsomeValueRO",
        RW: "tabBsomeValueRW",
    },
    tabC: {
        RO: "tabCsomeValueRO",
        RW: "tabCsomeValueRW",
    }
}
 */
const regex = /([^ ]+) \(([^\)]+)\) ([^ ]+)/;
const newData = data.map(val => val.value).reduce((accum, val) => {
    const arr = regex.exec(val);
    const value = arr[1];
    const tabName = arr[2];
    const rValue = arr[3];
    if (!accum[tabName]) {
        accum[tabName] = {};
    }
    accum[tabName][rValue] = value; 
    return accum; 
}, {});

function getValue(tab) {
    return Object.keys(newData).reduce((accum, tmpTab) => {
        const tmpTabValue = newData[tmpTab];
        if (tmpTab === tab) {
            accum.push(tmpTabValue.RO); 
            accum.push(tmpTabValue.RW); 
        }
        else {
            accum.push(tmpTabValue.RO);
        }
        return accum;
    }, []);
}

console.log("tabA", getValue("tabA"));
console.log("tabB", getValue("tabB"));
console.log("tabC", getValue("tabC"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...