JavaScript 向对象中的对象添加值

JavaScript add values to object in object

我是 JavaScript 的新手,目前正在为我的温度传感器编写 Angular nvD3 图表。

我有以下数据变量:

var data = [
        {
            key: 'Pt #1',
            values: [{x: "04.10.2016", y: 14 },{x: "05.10.2016", y: 16 },{x: "06.10.2016", y: 15 },{x: "07.10.2016", y: 16 }]
        },
        {
            key: 'PT #2',
            values: [{x: "04.10.2016", y: 39 },{x: "05.10.2016", y: 40 },{x: "06.10.2016", y: 47 },{x: "07.10.2016", y: 22 }]
        },
        {
            key: 'PT #3',
            values: [{x: "04.10.2016", y: 22 },{x: "05.10.2016", y: 23 },{x: "06.10.2016", y: 22 },{x: "07.10.2016", y: 43 }]
        },
        {
            key: 'PT #4',
            values: [{x: "04.10.2016", y: 25 },{x: "05.10.2016", y: 22 },{x: "06.10.2016", y: 23 },{x: "07.10.2016", y: 12 }]
        },
        {
            key: 'PT #5',
            values: [{x: "04.10.2016", y: 17 },{x: "05.10.2016", y: 17 },{x: "06.10.2016", y: 16 },{x: "07.10.2016", y: 37 }]
        },
        {
            key: 'PT #6',
            values: [{x: "04.10.2016", y: 24 },{x: "05.10.2016", y: 24 },{x: "06.10.2016", y: 25 },{x: "07.10.2016", y: 43 }]
        },
        {
            key: 'PT #7',
            values: [{x: "04.10.2016", y: 11 },{x: "05.10.2016", y: 12 },{x: "06.10.2016", y: 11 },{x: "07.10.2016", y: 11 }]
        }
];

由于数据对象中的数据必须由以后编写的脚本自动添加,我想知道如何访问数据变量中的某个键#并将其添加到数据变量中。

例如,我想将第二天及其温度添加到键 'PT #1' 中,值为“08.10.2016”和那天的温度而不删除其他日期,我该怎么做?

非常感谢!

您将迭代 array of objects 并找到相应的 key,然后操作 object 的值,如下所示:

data.forEach(function(item) {
    if(item.key === 'Pt #1'){
        item.values.forEach(function(subItem) {
           console.log("subItem", subItem);
           if(subItem.y == '14') {
               subItem.x = '08.10.2016'
           }
        });
    }
});

下面是 fiddle 同样的:

https://jsfiddle.net/r85hkpdw/

您可以使用 'forEach' 简单地遍历数组(数据),并在检查每个项目时发现其键是否与您要查找的键匹配。如果是这样,将新对象推送到该项目的 'values' 到对象数组

var newObj = { x: "08.10.2016", y: 34 };

data.forEach(item => {
    if (item.key === 'Pt #1') item.values.push(newObj)
});