Json Object Array: замена имен «ключей» их значениями, чтобы избежать того же имени ключа и легкого поиска - PullRequest
1 голос
/ 04 марта 2020

У меня есть массив json объекта, подобного этому:

[
    {
        "entity": "clientModal",
        "value": "MacBook"
    },
    {
        "entity": "siteName",
        "value": "abde"
    },
    {
        "entity": "clientModal",
        "value": "MacBook"
    },
    {
        "entity": "siteName",
        "value": "abcd"
    },
    {
        "entity": "clientName",
        "value": "ghe-1202m"
    },
    {
        "entity": "timePeriod",
        "value": "week"
    },
    {
        "entity": "clientName",
        "value": "ghe-1202m"
    },
    {
        "entity": "timePeriod",
        "value": "week"
    },
    {
        "entity": "clientName",
        "value": "ghe-1202m"
    },
    {
        "entity": "clientName",
        "value": "ppphone"
    },
    {
        "entity": "clientName",
        "value": "pppiphone"
    }
]

Я хочу, чтобы ключ 'entity' везде заменялся своим значением, а ключ 'value' должен находиться внутри него. Например:

[{"clientName": {"value": "pp iphone"}}]

Я пробовал все, но ничего не нашел.

Ответы [ 3 ]

1 голос
/ 04 марта 2020

Вам необходимо отобразить массив и создать новый объект, в котором значение ключа entity будет служить именем ключа.

const arrays = [
    {
        "entity": "clientModal",
        "value": "MacBook"
    },
    {
        "entity": "siteName",
        "value": "abde"
    },
    {
        "entity": "clientModal",
        "value": "MacBook"
    },
    {
        "entity": "siteName",
        "value": "abcd"
    },
    {
        "entity": "clientName",
        "value": "ghe-1202m"
    },
    {
        "entity": "timePeriod",
        "value": "week"
    },
    {
        "entity": "clientName",
        "value": "ghe-1202m"
    },
    {
        "entity": "timePeriod",
        "value": "week"
    },
    {
        "entity": "clientName",
        "value": "ghe-1202m"
    },
    {
        "entity": "clientName",
        "value": "ppphone"
    },
    {
        "entity": "clientName",
        "value": "pppiphone"
    }
];

const mappedArray = arrays.map(arr => ({
   [arr.entity]: {
     value: arr.value
   }
}));

console.log(mappedArray);
0 голосов
/ 04 марта 2020

Давайте попробуем что-нибудь без создания нового массива для вывода. Просто измените существующие:

for (let i = 0; i < arrays.length; i++) {
    arrays[i] = {
        [arrays[i].entity]: {
            value: arrays[i].value
        }
    }
}

console.log(arrays)
0 голосов
/ 04 марта 2020

Последовательный подход c зацикливания.

var a = [
    {
        "entity": "clientModal",
        "value": "MacBook"
    },
    {
        "entity": "siteName",
        "value": "abde"
    },
    {
        "entity": "clientModal",
        "value": "MacBook"
    }
];
var finalArray = []
for(let i = 0; i < a.length; i++) {
    let s =`{ "${a[i].entity}": { "value": "${a[i].value}" } }`;
    finalArray.push(JSON.parse(s));
}

console.log(JSON.stringify(finalArray));

Вывод:

[{"clientModal":{"value":"MacBook"}},{"siteName":{"value":"abde"}},{"clientModal":{"value":"MacBook"}}]
...