gpt4 book ai didi

javascript - 无法弄清楚为什么我的对象中的值会发生变化

转载 作者:数据小太阳 更新时间:2023-10-29 05:11:48 25 4
gpt4 key购买 nike

我想弄清楚为什么图表中的值显示不正确。当我在循环时记录 learningLanguages[j].count++ 的值时,它们是准确的。但是,当我在图表 $.map(nativeLanguages, function(n) {...}) 的 map 函数中记录 n 时,计数都不正确(并且看似随意)

var getLanguages = $.get('/languages.json', function(languages){
// top level language arrays
learningLanguages = []
nativeLanguages = []

// object constructor that correctly formats the language objects
function Language(lang) {
this.language = lang;
this.count = 0;
}

// Loop through the languages, create an object for each, push to top level language arrays
for(i = 0; i < languages.length; i++) {
currentLanguage = new Language(languages[i].language)

learningLanguages.push(currentLanguage)
nativeLanguages.push(currentLanguage)
}
});

// once the languages call is complete find signed-in user's info
getLanguages.done(function() {
$.get('/users.json', function(response) {
// console.log(response)
// adds the total number of users to the DOM
var numberOfUsers = response.length
$('#userCount').append('<h1>Total Users: ' + numberOfUsers + '</h1>')
// find the number of approved users
// var numberApproved = 0
// for (i = 0; i < response.length; i++) {
// if (response[i].approved === true) {
// numberApproved++
// }
// }
// Add the number of approved users to the DOM
// $('#userCount').append('<h1>Total Approved Users: ' + numberApproved + '</h1>')


// search for the language in the array and increase the count for that language
for (i = 0; i < response.length; i++) {
var userLearningLanguage = response[i].learning_language

for (j = 0; j < learningLanguages.length; j++) {
if (learningLanguages[j].language === userLearningLanguage) {
learningLanguages[j].count++
}
}
}
// search for the language in the array and increase the count for that language
for (i = 0; i < response.length; i++) {
var userNativeLanguage = response[i].native_language
for (j = 0; j < nativeLanguages.length; j++) {
if (nativeLanguages[j].language === userNativeLanguage) {
nativeLanguages[j].count++
}
}
}

var ctx = $("#languageComparisonChart");
var myChart = new Chart(ctx, {
type: 'bar',
data: {
labels:
$.map(learningLanguages, function(n) {
return n.language
}),
datasets: [{
label: '# of Learners',
data: $.map(learningLanguages, function(n) {
return n.count
}),
backgroundColor: 'rgba(255, 99, 132, 0.2)',
borderColor: 'rgba(255,99,132,1)',
borderWidth: 1
},
{
label: '# of Native Speakers',
data: $.map(nativeLanguages, function(n) {
console.log(n)
return n.count
}),
backgroundColor: 'rgba(54, 162, 235, 0.2)',
borderColor: 'rgba(54, 162, 235, 1)',
borderWidth: 1
}]
},
options: {
scales: {
yAxes: [{
ticks: {
beginAtZero:true
}
}]
},
responsive: false,
maintainAspectRatio: true
}
});
})
});
}

最佳答案

部分问题源于将同一个对象插入此处的 2 个不同数组:

    for(i = 0; i < languages.length; i++) {
currentLanguage = new Language(languages[i].language)

learningLanguages.push(currentLanguage)
nativeLanguages.push(currentLanguage)
}

这不会将 currentLanguage 复制到每个中,而是将同一对象的引用推送到每个中。

那么无论你在一个中对该对象引用做什么,都会在另一个中反射(reflect)出来

尝试制作 2 个独立的对象

    for(i = 0; i < languages.length; i++) { 
learningLanguages.push(new Language(languages[i].language))
nativeLanguages.push(new Language(languages[i].language))
}

使用全局变量也会给你带来麻烦......不要这样做!

关于javascript - 无法弄清楚为什么我的对象中的值会发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39799319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com