Мне необходимо связать несколько ключей с одним объектом. Например, у меня есть такой код:
var obj = {
1 : "class1",
2 : "class1",
3 : "class2",
4 : "class2",
5 : "class3",
6 : "class3",
7 : "class4",
...
n : "classn",
};
И мне необходимо не маленькому кол-ву див присвоить классы, согласно индексу. Делаю я это в jquery, вот так:
$('.container div').each(function(i) {
$(this).addClass(obj[i]);
});
Все работает хорошо, но у меня таких див будет десятки.. И представьте для каждого дива писать его индекс и класс внутри obj это как-то немного не разумно.
В коде, что выше, каждому ключу присвоены объекты. А мне нужно наоборот.. Для одного объекта несколько ключей. Что-то вроде такого:
var obj = {
1, 2 : "class1",
3, 4 : "class2",
5, 6 : "class3",
7, 8, 9, 10 : "class4",
...
n, n2 : "classn",
};
Но так не работает, и не будет. Подскажите, пожалуйста, как мне сделать что ни будь подобное, что бы не плодить строчки для каждого ключа. Т.е. мне нужно одному объекту присвоить несколько ключей. Как это можно сделать? Спасибо! Мне это очень нужно..
Вы можете попробовать сделать наоборот:
const obj = {
"class1": [1, 2, 3, 4],
"class2": [5, 6, 7],
"class3": [8, 9, 10]
}
const objKeys = Object.keys(obj),
objValues = Object.values(obj);
const nodes = document.querySelectorAll('.container div');
for (var i = 0; i < nodes.length; i++) {
let index = objValues.findIndex(ids => ids.indexOf(i + 1) > -1)
if (index > -1) {
nodes[i].classList.add(objKeys[index]);
}
}
var obj0 = {
class1: [1, 2],
class2: [3, 4],
class3: [5, 6],
class4: [7, 8, 9, 10],
}
var obj = {}
for (var [c, a] of Object.entries(obj0)) {
for (var i of a) {
obj[i] = c
}
}
console.log(obj)
.as-console-wrapper.as-console-wrapper { max-height: 100vh }
Продвижение своими сайтами как стратегия роста и независимости