#javascript #d3.js
#javascript #d3.js
Вопрос:
Итак, у меня есть следующее гнездо:
var myNest = [
{"key":"1","values":[...]},
{"key":"2","values":[...]},
{"key":"3","values":[...]},
]
Как я могу получить доступ к этим элементам, используя их ключи?
Я знаю, что могу получить к ним доступ по их индексу
myNext[0] //return elements with key=="1"
myNest[1] //return elements with key=="2"
Но то, что я хотел бы сделать, это:
myNest["1"] //return elements with key=="1"
myNest["2"] //return elements with key=="2"
Спасибо
Ответ №1:
Используйте map()
вместо entries()
при создании вашего nest. Вы, вероятно, сделали что-то похожее на это:
var products = [{
"id": 1,
"name": "Cat Hat",
"price": 49
}, {
"id": 2,
"name": "Unicorn Boots",
"price": 139
}, {
"id": 3,
"name": "Pink Woolly Jumper",
"price": 34
}];
var productsById = d3.nest()
.key(function(p) {
return p.id;
})
.entries(products);
console.log(productsById)
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
Если вместо этого вы используете map()
:
var products = [{
"id": 1,
"name": "Cat Hat",
"price": 49
}, {
"id": 2,
"name": "Unicorn Boots",
"price": 139
}, {
"id": 3,
"name": "Pink Woolly Jumper",
"price": 34
}];
var productsById = d3.nest()
.key(function(p) {
return p.id;
})
.map(products);
console.log(productsById)
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
Вы получаете карту, на которой вы можете напрямую обращаться к объектам по их ключу, например, с помощью productsById["2"]
в этом примере.
Ответ №2:
Вы могли бы использовать хэш-таблицу, где ключ вашего объекта является ключом для самого объекта.
Для ES6 я предлагаю использовать карту:
var myNest = [{ key: "1", values: [1, 4] }, { key: "2", values: [2, 5] }, { key: "3", values: [3, 6] }],
hash = Object.create(null);
myNest.forEach(function (a) {
hash[a.key] = a;
});
console.log(hash['2']);