Hi All
I have a payload 0 to 5 in non-linear fractions. i have a "look up" array[16]
How do i do the following?
- Find the value in the array that closest match the payload.
- Return the index position of this value.
Hi All
I have a payload 0 to 5 in non-linear fractions. i have a "look up" array[16]
How do i do the following?
Loop through your array and do some calculations and if statements
let result = array[0] // start with first value of array
let resultIndex = 0;
array.forEach((el, index) = > {
if difference of Math.abs(el - msg.payload) is less than the result difference ....
result = el
resultIndex = index
})
Math.abs() for absolute value of number
Test flow :
[{"id":"e8ed68c4.d45f68","type":"function","z":"a311c276.8fe21","name":"","func":"let array = [1,2,4,-5,6,7,8,77,-4, 45]\nlet result = array[0] // start with first value of array\nlet resultIndex = 0;\n\n\narray.forEach((el, index) => {\n\nif (Math.abs(el - msg.payload) < Math.abs(result -msg.payload)) {\nresult = el;\nresultIndex = index;\n}\n})\nmsg.array = array;\nmsg.result = result;\nmsg.resultIndex = resultIndex;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":560,"y":2260,"wires":[["cd666bd5.22db58"]]},{"id":"da3c450b.a19978","type":"inject","z":"a311c276.8fe21","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"-6.2","payloadType":"num","x":300,"y":2260,"wires":[["e8ed68c4.d45f68"]]},{"id":"cd666bd5.22db58","type":"debug","z":"a311c276.8fe21","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":830,"y":2260,"wires":[]}]
ps. it would be better if we had some real data to better test the results
Hi All
Thank you for your time to assist.
My function looks like this:
var myNumber = (5/15)*msg.payload
var numbers = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150]
var MyValue = Math.abs(numbers[0] - myNumber)
var idx = 0
for(var c = 1; c < numbers.length; c++)
{
var cMyValue = Math.abs(numbers[c] - myNumber)
if(cMyValue < MyValue)
{
idx = c
MyValue = cMyValue
}
}
msg.payload = idx
return msg
This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.