2016-10-22 23 views
1

所以我有以下的窩:通過鑰匙訪問巢元素與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" 

感謝

回答

4

使用map()而不是entries()構建巢時。你或許有過類似這樣的東西:

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"]

1

你可以給我們一個散列表,其中你的對象的關鍵是對象本身的關鍵。

對於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']);