Search code examples
javascriptarraysnode-red

Can not read property of array element in javascript


Im fairly new to javascript and im trying to find an object of an array i created by the configID property. I used the method find() for this.

JS Code:

var configurationArray = flow.get("configurationArray") || [];
var configurationId = msg.topic.split("/")[1];
var configuration = {
  configID: this.configurationID,
  configurationModules: this.MSGesture.payload
};

if(!configurationArray.find(x => x.configID == this, configurationId)){
  configurationArray.push(this.configuration);
} else {
  //to do
}

I am using node-red which gives me flow and msg.

The Error i get:

Cannot read property 'configId' of undefined

Any help is appreciated


Solution

  • You could destructure the property and add a default object.

    Then take some instead of find, because you need only the check.

    At last, omit this and take directly the value.

    if (!configurationArray.some(({ configID } = {}) => configID === configurationId)) {
        configurationArray.push(this.configuration);
    } else {
        //to do
    }
    

    If you like to have an abstract callback, you could take a closure over configurationId, like

    const hasId = id => ({ configID } = {}) => configID === id;
    
    if (!configurationArray.some(hasId(configurationId)) {
        configurationArray.push(this.configuration);
    } else {
        //to do
    }