开发者问题收集

在 For 循环中创建键值对数组

2020-01-30
855

我从我的 ajax 获得了此响应

这是我的 configs.objects

configs.objects    = ['Mexico','Brazil','Spain','Italy','USA'];

在此处输入图片描述

(7) [19, 51, 40, 69, 15, 77, 40]

我创建了一个 for 循环

var datasets = [];

for (i = 0; i < configs.objects.length; i++) {

    console.log(i);

    datasets[i]['borderWidth']      = 1;
    datasets[i]['hoverBorderWidth'] = 2;
    datasets[i]['hoverBorderColor'] = '#fff';
    datasets[i]['data']             = response[i];
    datasets[i]['label']            = configs.objects[i];


    // debugger;

}


console.log(datasets);

我一直得到

Uncaught TypeError: Cannot set property 'borderWidth' of undefined

为什么?我做错什么了吗?过去 2 个小时里我一直盯着这些代码。

我不知道为什么我总是收到这个错误。

3个回答

datasets 是一个空数组,没有任何元素,您永远不会添加任何元素。只需确保第 i 个元素首先初始化为对象即可:

datasets[i] = {};

您还可以稍微重构一下代码,改为将 push 对象文字推送到 datasets ,以获得相同的结果:

datasets.push({
    borderWidth: 1,
    hoverBorderWidth: 2,
    hoverBorderColor: #fff,
    data: response[i],
    label: configs.objects[i]
});
apsillers
2020-01-30
var datasets = [];

for (i = 0; i < configs.objects.length; i++) {

    let obj = {}

    obj['borderWidth']      = 1;
    obj['hoverBorderWidth'] = 2;
    obj['hoverBorderColor'] = '#fff';
    obj['data']             = response[i];
    obj['label']            = configs.objects[i];

    datasets[i] = obj;


    // debugger;

}
xana
2020-01-30

在设置值之前,需要先将其初始化为一个对象:

datasets[i] = {};
datasets[i]['key'] = 'value';

进一步阅读: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer

Jeremy Harris
2020-01-30