Javascript 计算对象中同一个键内的多个唯一值
我试图跟踪四个特定字符串值在同一个键中显示的次数 问题是,我很难添加多个计数器。第一个计数器工作并跟踪第一个条件,但if/else语句中的下一个条件会阻止初始条件和此后的每个条件正确相加。数据来自包含多个URL的Javascript 计算对象中同一个键内的多个唯一值,javascript,ajax,fetch,Javascript,Ajax,Fetch,我试图跟踪四个特定字符串值在同一个键中显示的次数 问题是,我很难添加多个计数器。第一个计数器工作并跟踪第一个条件,但if/else语句中的下一个条件会阻止初始条件和此后的每个条件正确相加。数据来自包含多个URL的Promise.all 这是我的密码: const urls = [ 'https://api.github.com/users/TylerP33/repos?page=1', 'https://api.github.com/users/TylerP33/repos?page=2
Promise.all
这是我的密码:
const urls = [
'https://api.github.com/users/TylerP33/repos?page=1',
'https://api.github.com/users/TylerP33/repos?page=2',
'https://api.github.com/users/TylerP33/repos?page=3',
'https://api.github.com/users/TylerP33/repos?page=4',
'https://api.github.com/users/TylerP33/repos?page=5',
'https://api.github.com/users/TylerP33/repos?page=6',
'https://api.github.com/users/TylerP33/repos?page=7',
'https://api.github.com/users/TylerP33/repos?page=8',
'https://api.github.com/users/TylerP33/repos?page=9',
'https://api.github.com/users/TylerP33/repos?page=10',
'https://api.github.com/users/TylerP33/repos?page=11',
'https://api.github.com/users/TylerP33/repos?page=12'
]
function getLanguages() {
return Promise.all(urls.map(url =>
fetch(`${url}`)
.then(response => response.json())
.then(obj => obj.forEach(function(val) {
var rubyCounter = 0
var cssCounter = 0
var htmlCounter = 0
var jsCounter = 0
if (val.language === "Ruby") {
rubyCounter++;
console.log(rubyCounter);
}
})))
)
}
getLanguages();
rubyCounter
将返回235
,这是正确的数量,但是如果我添加更多的条件,就像通过同一个键运行的真/假条件会抛出所有内容一样。我可能错过了一些引人注目的东西,但我很想知道你们的想法
提前感谢。对于此代码,如果记录,rubyCounter将始终为
1
,因为这些计数器始终在calllback中初始化
您需要将这些计数器的数据初始化移到getLanguages
的根目录下
对于每个计数器,我不使用多变量,而是使用一个对象,对于每种要计数的语言,都有一个属性
const URL=[
'https://api.github.com/users/TylerP33/repos?page=1',
'https://api.github.com/users/TylerP33/repos?page=2',
'https://api.github.com/users/TylerP33/repos?page=3',
'https://api.github.com/users/TylerP33/repos?page=4',
'https://api.github.com/users/TylerP33/repos?page=5',
'https://api.github.com/users/TylerP33/repos?page=6',
'https://api.github.com/users/TylerP33/repos?page=7',
'https://api.github.com/users/TylerP33/repos?page=8',
'https://api.github.com/users/TylerP33/repos?page=9',
'https://api.github.com/users/TylerP33/repos?page=10',
'https://api.github.com/users/TylerP33/repos?page=11',
'https://api.github.com/users/TylerP33/repos?page=12'
]
函数getLanguages(){
让计数器={
鲁比:0,
html:0
}
返回Promise.all(url.map)(url=>
获取(`${url}`)
.then(response=>response.json())
.then(obj=>obj.forEach(函数(val)){
/*var rubyCounter=0
var CSSCHONTER=0
var htmlCounter=0
var jsCounter=0*/
如果(val.language==“Ruby”){
counter.ruby++;
}else if(val.language==“HTML”){
counter.html++;
}
}))))
.然后(()=>{
控制台目录(计数器)
})
}
getLanguages()代码>如果记录此代码,则rubyCounter
将始终为1
,因为这些计数器始终在Callback中初始化
您需要将这些计数器的数据初始化移到getLanguages
的根目录下
对于每个计数器,我不使用多变量,而是使用一个对象,对于每种要计数的语言,都有一个属性
const URL=[
'https://api.github.com/users/TylerP33/repos?page=1',
'https://api.github.com/users/TylerP33/repos?page=2',
'https://api.github.com/users/TylerP33/repos?page=3',
'https://api.github.com/users/TylerP33/repos?page=4',
'https://api.github.com/users/TylerP33/repos?page=5',
'https://api.github.com/users/TylerP33/repos?page=6',
'https://api.github.com/users/TylerP33/repos?page=7',
'https://api.github.com/users/TylerP33/repos?page=8',
'https://api.github.com/users/TylerP33/repos?page=9',
'https://api.github.com/users/TylerP33/repos?page=10',
'https://api.github.com/users/TylerP33/repos?page=11',
'https://api.github.com/users/TylerP33/repos?page=12'
]
函数getLanguages(){
让计数器={
鲁比:0,
html:0
}
返回Promise.all(url.map)(url=>
获取(`${url}`)
.then(response=>response.json())
.then(obj=>obj.forEach(函数(val)){
/*var rubyCounter=0
var CSSCHONTER=0
var htmlCounter=0
var jsCounter=0*/
如果(val.language==“Ruby”){
counter.ruby++;
}else if(val.language==“HTML”){
counter.html++;
}
}))))
.然后(()=>{
控制台目录(计数器)
})
}
getLanguages()代码>请检查这是否适用于您:
const urls = [
'https://api.github.com/users/TylerP33/repos?page=1',
'https://api.github.com/users/TylerP33/repos?page=2'
]
var counters = {};
function getLanguages() {
return Promise.all(urls.map(url => {
fetch(`${url}`)
.then(response => response.json())
.then(json => json.forEach(function (val) {
if (!counters[val.language])
counters[val.language] = 0;
counters[val.language]++;
}))
.then(() => {
console.log(counters);
});
}));
}
getLanguages();
请检查这是否适用于您:
const urls = [
'https://api.github.com/users/TylerP33/repos?page=1',
'https://api.github.com/users/TylerP33/repos?page=2'
]
var counters = {};
function getLanguages() {
return Promise.all(urls.map(url => {
fetch(`${url}`)
.then(response => response.json())
.then(json => json.forEach(function (val) {
if (!counters[val.language])
counters[val.language] = 0;
counters[val.language]++;
}))
.then(() => {
console.log(counters);
});
}));
}
getLanguages();
从response.json()
获得的结果不是json。调用该函数将响应的数据解释为JSON,对其进行解析并返回一个JavaScript对象。JSON是一种基于字符串的数据表示形式,在遍历、迭代器。。。它。对于此代码,rubyCounter
如果被记录,将始终是1
。从response.json()
得到的结果不是json。调用该函数将响应的数据解释为JSON,对其进行解析并返回一个JavaScript对象。JSON是一种基于字符串的数据表示形式,在遍历、迭代器。。。它。对于此代码rubyCounter
如果被记录,它将始终是1
。执行得非常漂亮!工作得很有魅力!非常感谢。制作精美!工作得很有魅力!非常感谢。这真是太棒了!非常感谢!我甚至不知道这是可能的:D.两个答案都很有效,所以我不确定谁得到了复选标记…:/这真是太棒了!非常感谢!我甚至不知道这是可能的:D.两个答案都很有效,所以我不确定谁得到了复选标记…:/