我正在运行此函数来为chartJS构建一个对象数组:
//create object from item verts
function creatVerticalObj(arr) {
var verticalObj = {};
for (var i = 0, j = arr.length; i < j; i++) {
verticalObj[arr[i]] = (verticalObj[arr[i]] || 0) + 1;
}
return verticalObj;
}
var getLabels = Object.keys(creatVerticalObj(itemFilters));
var getColorValues = Object.keys(creatVerticalObj(itemColor));
var getValues = Object.values(creatVerticalObj(itemCount));
然后在chartJS中我运行数据:
data: {
datasets: [{
data: getValues,
backgroundColor: getColorValues,
}],
labels: getLabels
},
我知道我输入函数的数组中包含相同数量的项目。每个都有19个......但它实际上只构建了7个对象。
我知道有很多值是重复的(它们是数字)。我在想,如果它们是重复的,我的逻辑就是删除值......我需要解决这个问题。
答案 0 :(得分:1)
您的阵列是否具有不同的值?您正在使用数组的值作为键来构建新对象,因此如果它们没有不同的值,您最终会破坏这些键。
for (var i = 0, j = arr.length; i < j; i++) {
verticalObj[arr[i]] = (verticalObj[arr[i]] || 0) + 1;
}
例如,如果你的数组= [1,2,1,2],第一次迭代将设置verticalObj [1] = 2,第二次通过verticalObj [2] = 2,第三次通过verticalObj [1] ] = 2.最后,你最终得到的对象如下:
{
1: 2,
2: 3
}
我认为你想要的是:
for (var i = 0; i < arr.length; i++) {
verticalObj[i] = (arr[i] || 0) + 1;
}
(因为你没有使用j
变量,所以在你的for循环中摆脱了额外的混乱。)
答案 1 :(得分:0)
您的代码会将重复值放入计数中,因此如果您有7个值,它应该如下所示:
{
1: 3,
2: 5,
3: 5,
4: 1,
5: 1,
6: 1,
7: 3
}
右边的数字应该与你输入值的数量相加(你所说的数字是19)。
如果这不是您想要的行为,给出示例输入和输出会很有帮助。