首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过API响应json数据的javascript循环

通过API响应json数据的javascript循环
EN

Stack Overflow用户
提问于 2021-12-17 17:04:26
回答 2查看 174关注 0票数 0

我正在学习javascript,试图将一些代码合并到Node函数块中。在下面的代码中,var data是来自API的json有效负载。

代码语言:javascript
复制
var data = {
            "201201/tempUoTwoBalco": 
                {"value": 63.1199951171875, "route": "/vui/platforms/benshome/devices/201201/tempUoTwoBalco", "writable": false}, 
            "201201/tempUoThreeBalco": 
                {"value": 74.12999725341797, "route": "/vui/platforms/benshome/devices/201201/tempUoThreeBalco", "writable": false}, 
            "201201/Oat": 
                {"value": 89.99999237060547, "route": "/vui/platforms/benshome/devices/201201/Oat", "writable": false}, 
            "201201/RmTmpSpt": 
                {"value": 79.99999237060547, "route": "/vui/platforms/benshome/devices/201201/RmTmpSpt", "writable": true}, 
            "201201/RmTmp": 
                {"value": NaN, "route": "/vui/platforms/benshome/devices/201201/RmTmp", "writable": false}, 
            "201201/UhCmd": 
                {"value": 0, "route": "/vui/platforms/benshome/devices/201201/UhCmd", "writable": false}, 
            "201201/GlblHtgDsbl": 
                {"value": 0, "route": "/vui/platforms/benshome/devices/201201/GlblHtgDsbl", "writable": false}
};

console.log(data)


var supplyTemp = {};
var returnTemp = {};

sensor1 = "/vui/platforms/benshome/devices/201201/tempUoTwoBalco"
sensor2 = "/vui/platforms/benshome/devices/201201/tempUoThreeBalco"



for(var key in data){
    for(var key1 in data[key]){
        if(key1 === sensor1){
            console.log("sensor1 found "+ data[key][key1])
            // append float to supplyTemp?
        };

        if(key1 === sensor2){
            console.log("sensor2 found "+ data[key][key1])
            // append float to returnTemp?
        };
    };
};

如果在json有效负载中找到了for(var key in data){,那么如何将for循环keys合并到返回supplyTempreturnTemp的函数中呢?有点像return [[supplyTemp,returnTemp]];

谢谢你的智慧,这是我想要得到的.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-17 17:17:14

您需要将匹配的value属性sensor1sensor2分别存储在supplyTempreturnTemp中吗?您可以使用filter筛选与提供的传感器匹配的值,然后将结果映射到获取值。下面是一个例子:

代码语言:javascript
复制
var data = {
  "201201/tempUoTwoBalco":
    { "value": 63.1199951171875, "route": "/vui/platforms/benshome/devices/201201/tempUoTwoBalco", "writable": false },
  "201201/tempUoThreeBalco":
    { "value": 74.12999725341797, "route": "/vui/platforms/benshome/devices/201201/tempUoThreeBalco", "writable": false },
  "201201/Oat":
    { "value": 89.99999237060547, "route": "/vui/platforms/benshome/devices/201201/Oat", "writable": false },
  "201201/RmTmpSpt":
    { "value": 79.99999237060547, "route": "/vui/platforms/benshome/devices/201201/RmTmpSpt", "writable": true },
  "201201/RmTmp":
    { "value": NaN, "route": "/vui/platforms/benshome/devices/201201/RmTmp", "writable": false },
  "201201/UhCmd":
    { "value": 0, "route": "/vui/platforms/benshome/devices/201201/UhCmd", "writable": false },
  "201201/GlblHtgDsbl":
    { "value": 0, "route": "/vui/platforms/benshome/devices/201201/GlblHtgDsbl", "writable": false }
};

var supplyTemp = {};
var returnTemp = {};

let sensor1 = "/vui/platforms/benshome/devices/201201/tempUoTwoBalco"
let sensor2 = "/vui/platforms/benshome/devices/201201/tempUoThreeBalco"

supplyTemp = (Object.values(data).filter(element => element.route == sensor1).map(result => result.value))
returnTemp = (Object.values(data).filter(element => element.route == sensor2).map(result => result.value))

console.log([supplyTemp, returnTemp])

票数 1
EN

Stack Overflow用户

发布于 2021-12-17 17:22:37

创建一个返回所找到对象的值的方法。我的代码与@deepak非常相似,只不过是D.R.Y (不要重复)。

我选择.find()而不是.filter(),因为您的代码表明传感器是唯一的。

  • Find;返回匹配项或null。
  • 筛选器将返回匹配项数组或空数组。

你应该选择你喜欢的哪一个。

代码语言:javascript
复制
let data = {
            "201201/tempUoTwoBalco": 
                {"value": 63.1199951171875, "route": "/vui/platforms/benshome/devices/201201/tempUoTwoBalco", "writable": false}, 
            "201201/tempUoThreeBalco": 
                {"value": 74.12999725341797, "route": "/vui/platforms/benshome/devices/201201/tempUoThreeBalco", "writable": false}, 
            "201201/Oat": 
                {"value": 89.99999237060547, "route": "/vui/platforms/benshome/devices/201201/Oat", "writable": false}, 
            "201201/RmTmpSpt": 
                {"value": 79.99999237060547, "route": "/vui/platforms/benshome/devices/201201/RmTmpSpt", "writable": true}, 
            "201201/RmTmp": 
                {"value": NaN, "route": "/vui/platforms/benshome/devices/201201/RmTmp", "writable": false}, 
            "201201/UhCmd": 
                {"value": 0, "route": "/vui/platforms/benshome/devices/201201/UhCmd", "writable": false}, 
            "201201/GlblHtgDsbl": 
                {"value": 0, "route": "/vui/platforms/benshome/devices/201201/GlblHtgDsbl", "writable": false}
};


let supplyTemp = {};
let returnTemp = {};

let sensor1 = "/vui/platforms/benshome/devices/201201/tempUoTwoBalco";
let sensor2 = "/vui/platforms/benshome/devices/201201/tempUoThreeBalco";

console.log(getTemp(sensor1, data));
// returns 63.1199951171875

console.log(getTemp(sensor1, data));
// returns 63.1199951171875

console.log(getTemp('', data));
// returns null

/**
* Get the sensor value for the given sensorRoute in the given array.
*/
function getTemp(sensorRoute, arr) { 
    let foundItem = Object.values(arr).find(element => element.route == sensorRoute);

  return foundItem ? foundItem.value : null;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70396557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档