0

I have a request

const request=additionalFields: [
    { field: 'PHONE', required: true },  
    { field: 'COMPANY', required: true },
    { field: 'MOBILE', required: true }, 
    { field: 'COUNTRY', required: true } 
  ]

the response i am getting is this

"additionalFields":
{
    'PHONE':true,
    'COMPANY':true,
    'MOBILE':true,
    'COUNTRY':true
}

i am not sure how to compare them. i kind of wrote something but even to me it looks wrong

const fields = request["additionalFields"];
    
    for (let i = 0, len = fields.length; i < len; i++) {
      expect(request.additionalFields[i].required).to.eql(
        response.additionalFields
      );

5 Answers 5

1

Here's another way. Just filter out anything that doesn't match up, then you'll have an array of differences if there are any.

const request={
additionalFields: [
    { field: 'PHONE', required: true },  
    { field: 'COMPANY', required: true },
    { field: 'MOBILE', required: true }, 
    { field: 'COUNTRY', required: true } 
  ]
 }

const incoming = {
  "additionalFields": {
    'PHONE': true,
    'COMPANY': true,
    'MOBILE': false,
    'COUNTRY': true
  }
}

let differences = request.additionalFields.filter(f => incoming.additionalFields[f.field] !== f.required)
console.log(differences)

Sign up to request clarification or add additional context in comments.

Comments

0

    const request = [
        { field: 'PHONE', required: true },  
        { field: 'COMPANY', required: true },
        { field: 'MOBILE', required: true }, 
        { field: 'COUNTRY', required: true } 
      ]

    const response = {"additionalFields":
    {
        'PHONE':true,
        'COMPANY':true,
        'MOBILE':true,
        'COUNTRY':true
    }}
    
    for (const [key, value] of Object.entries(response['additionalFields'])) {
       const {required, field} = request.find(({field}) => key === field);
        if(required === value) {  // here you can compare
            console.log(key, field, value);  
        }
    }

Comments

0

You need to dereference the response.additionalFields object using the value of field from each entry in request.additionalFields. Something like

for(const { field, required } of request.additionalFields) {
    expect(required).to.eql(
        response.additionalFields[field]
      );
}

Comments

0

You should loop over each field detail in the request and compare the value against the response. Here you go:

const request = {
    additionalFields: [
        { field: 'PHONE', required: true },
        { field: 'COMPANY', required: true },
        { field: 'MOBILE', required: true },
        { field: 'COUNTRY', required: true },
    ],
};

const response = {
    additionalFields: {
        PHONE: true,
        COMPANY: true,
        MOBILE: true,
        COUNTRY: true,
    },
};

for (let f of request.additionalFields) {
    // Observe f is like { field:'PHONE', required: true }
   // Next two lines are just for test, please remove and uncomment last one in your use case.
    const comparisonResult = f.required === response.additionalFields[f.field];
    console.log(`for field ${f.field}, It's ${comparisonResult}`);
    // expect(f.required).to.eql(response.additionalFields[f.field]);
}

You can further improve readability by using destructuring, drop a comment if you want to see that.

Comments

0

You can use the for...of syntax to do this.

Here's the documentation.

const request = {
  additionalFields: [
    { field: 'PHONE', required: true },  
    { field: 'COMPANY', required: true },
    { field: 'MOBILE', required: true }, 
    { field: 'COUNTRY', required: true } 
  ]
};

const response = {
  additionalFields: {
    PHONE:true,
    COMPANY:true,
    MOBILE: true,
    COUNTRY:true
  }
}

const requestFields = request['additionalFields'];
const responseFields = response['additionalFields'];

for(const { required, field } of requestFields) {
    expect(required).to.eql(responseFields[field]);
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.