Прежде чем мы сможем начать кодирование, нам нужно отсортировать нужный формат данных. Ваш пример содержит синтаксическую ошибку:
tags: ["11111111":["12345678"], "22222222", "33333333", "44444444"]
Вероятно, должно быть:
{ tags: [ { "11111111": ["12345678"] }, "22222222", "33333333", "44444444"] }
С исправленной синтаксической ошибкой мы можем захотеть изменить еще больше. Хотя javascript не будет жаловаться, tags
теперь является array
смешанных типов: он содержит объект ({ "11..": ["123..."] }
) и строки ("222..", "333.."
). Я бы сказал, что вы хотите изменить это на следующее:
{
tags: {
"11111111": [ "12345678" ],
"22222222": [ ],
"33333333": [ ]
}
}
Мы превратили tags
в объект, который хранит массив идентификаторов для каждого тега. Когда идентификаторов нет, массив пуст.
Чтобы инициализировать этот объект, мы перебираем массив тегов:
const tags = ["11111111", "22222222", "33333333", "44444444"];
const tagGroups = {};
tags.forEach(t => { tagGroups[t] = []; });
console.log(tagGroups);
Теперь, когда у вас настроены пустые группы, вы готовы просмотреть данные.
const tags = ["11111111", "22222222", "33333333", "44444444"];
const data = [{
"id": "12345678",
"tagging": {
"tags": [{
"id": "11111111"
}]
}
}];
const tagGroups = {};
tags.forEach(t => {
tagGroups[t] = [];
});
data.forEach(d => {
d.tagging.tags.forEach(tag => {
tagGroups[tag.id].push(d.id);
});
});
console.log(tagGroups);
Теперь вы можете проверить количество тегов, позвонив по номеру tagGroups[id].length
. E.g.:
console.log(tagGroups["11111111"].length); // Logs `1`
Есть более короткие / другие способы написания этого кода, но я старался сделать его максимально читабельным.
Примечание: если ваш data
содержит тег, которого нет в вашем массиве tags
, код сломается.