JavaScript将数组添加到对象数组

4
我尝试向预定义的对象数组中添加新值,代码如下:

$scope.chartConfig.series.push(
    [{
        name: "Brands",
        colorByPoint: true,
        data: []
    }]
);

我想向data中添加一个新的数组值,但一直失败。我尝试过:

$scope.todayChartConfig.series['data'] = [];
$scope.todayChartConfig.series['data'].push(
    {
        name: "Internet Explorer",
        y: 56.33
    },
    {
        name: "Chrome",
        y: 30.12
    }
);

但它会添加到一个新对象中,而不是与当前数据数组合并。
我期望的是:
[{
  name: "Brands",
  colorByPoint: true,
  data: [
    {
        name: "Internet Explorer",
        y: 56.33
    },
    {
        name: "Chrome",
        y: 30.12
    }
  ]
}]

我该如何实现这个目标?

根据您当前的数据结构,应该是这样的:$scope.todayChartConfig.series[0][0].data.push(...),但我不确定您是否真的打算使用这个二维数组。 - slebetman
@ChrisMartin 我正在使用Angular。 - ssuhat
我有点困惑。根据你的第一个例子,series 属性似乎是一个对象数组的数组。但在你的第二个例子中,series 看起来是一个对象,你试图访问其属性。 - jeffdill2
3个回答

2

第一个问题是todayChartConfig.series是一个数组,因此您应该将内容添加到$scope.todayChartConfig.series[0]

第二个问题是您需要单独添加对象。(不准确,请参见下面的编辑

因此,以下代码应该可以工作:

$scope.todayChartConfig.series[0]['data']
   .push({
        name: "Internet Explorer",
        y: 56.33
    }).push({
        name: "Chrome",
        y: 30.12
    });

编辑:您也可以将所有对象附加在一起(请参见下面@slebetman的评论)。因此,这也可以正常工作。
$scope.todayChartConfig.series[0]['data']
.push({
        name: "Internet Explorer",
        y: 56.33
    },
    {
        name: "Chrome",
        y: 30.12
    });

1
这个答案是错误的,因为 Array.push() 实际上可以接受多个参数。 - slebetman
数据 = [] 因此,数据.push([1, 2])的结果为[[1, 2]]而不是[1,2]。听起来@SSuhat想要后者而不是前者,因此需要逐个推送。 - adilapapaya
不是 data.push([1,2]),而是 data.push(1,2) - slebetman

2

根据您当前的数据结构,应该是:

$scope.todayChartConfig.series[0][0].data.push(
    {
        name: "Internet Explorer",
        y: 56.33
    },
    {
        name: "Chrome",
        y: 30.12
    }
);

这应该是可行的,因为:

$scope.chartConfig.series.push(
    [{
        name: "Brands",
        colorByPoint: true,
        data: []
    }]
);

将一个对象数组推入另一个数组中。

然而,如果上述代码是一个笔误,你真正想要的是:

$scope.chartConfig.series.push(
    {
        name: "Brands",
        colorByPoint: true,
        data: []
    }
);

如果是这样的话,应该是这样的:
$scope.todayChartConfig.series[0].data.push(
    {
        name: "Internet Explorer",
        y: 56.33
    },
    {
        name: "Chrome",
        y: 30.12
    }
);

工作完美无瑕。不,这不是打错了。谢谢 :D - ssuhat
不用谢,只是我觉得那样看起来有点奇怪 :) - slebetman
是啊,当我看我的代码时,我也会头痛。哈哈,需要重构它们。感谢提醒!:D - ssuhat

1

您的原始数组是$scope.chartConfig.series,然后您将其推送到$scope.todayChartConfig.series中。您的问题在于您没有将其推送到正确的数组中。

您需要执行以下操作:

$scope.chartConfig.series['data'] = [];
$scope.chartConfig.series['data'].push(
    {
        name: "Internet Explorer",
        y: 56.33
    },
    {
        name: "Chrome",
        y: 30.12
    }
);

如果您想做您想做的事情,请查看此jsFiddle


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接