我正在尝试从公众那里获取所有算法来挖掘api:
var lookup = {}
var result = []
axios.get('https://whattomine.com/calculators.json')
.then(function(response) {
console.log(response)
for (var item, i = 0; item = response["coins"][i++];) {
var algorithm = item.algorithm
if (!(algorithm in lookup)) {
lookup[algorithm] = 1
result.push(algorithm)
}
}
console.log(result)
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.18.0/axios.min.js"></script>
如您所见,我正在使用axios查询api。然后,我想过滤掉所有不在查找中的算法。
因此,我希望拥有:
[]
但是,我目前收回了['Keccak', 'Scrypt-OG', 'X11']
。
有人建议我在做什么错吗?
感谢您的答复!
答案 0 :(得分:2)
您应该看到数据结构:coins
的键是字符串,而不是像i ++这样的数字
var lookup = {}
var result = []
axios.get('https://whattomine.com/calculators.json')
.then(function(response) {
for (var key in response.data["coins"]) {
var item = response.data["coins"][key]
var algorithm = item.algorithm
if (!(algorithm in lookup)) {
lookup[algorithm] = 1
result.push(algorithm)
}
}
console.log(result)
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.18.0/axios.min.js"></script>
答案 1 :(得分:2)
正如其他人所说,response
是具有data
属性的对象,包含实际响应。另外,您试图像遍历数组一样遍历它们,但这是一个将硬币名称作为属性的对象。 Lodash可以使您的生活更轻松:
axios.get('https://whattomine.com/calculators.json')
.then(response => {
const coins = response.data.coins;
const result = _.uniq(_.map(coins, item => item.algorithm));
console.log(result);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.18.0/axios.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>