我正在学习javascript,试图将一些代码合并到Node函数块中。在下面的代码中,var data是来自API的json有效负载。
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合并到返回supplyTemp和returnTemp的函数中呢?有点像return [[supplyTemp,returnTemp]];
谢谢你的智慧,这是我想要得到的.
发布于 2021-12-17 17:17:14
您需要将匹配的value属性sensor1和sensor2分别存储在supplyTemp和returnTemp中吗?您可以使用filter筛选与提供的传感器匹配的值,然后将结果映射到获取值。下面是一个例子:
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])
发布于 2021-12-17 17:22:37
创建一个返回所找到对象的值的方法。我的代码与@deepak非常相似,只不过是D.R.Y (不要重复)。
我选择.find()而不是.filter(),因为您的代码表明传感器是唯一的。
你应该选择你喜欢的哪一个。
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;
}https://stackoverflow.com/questions/70396557
复制相似问题