8

This is my Array with data:

let myvalue= [
    {
        "feeSubHeadId": 1022692502,
        "feeSubHeadName": "Quiz-01",
        "fineAmount": 20
    },
    {
        "feeSubHeadId": 1012182502,
        "feeSubHeadName": "Half Yearly Exam",
        "fineAmount": 0
    },
    {
        "feeSubHeadId": 1022682502,
        "feeSubHeadName": "Quiz-02",
        "fineAmount": 0
    },
    {
        "feeSubHeadId": 1012192502,
        "feeSubHeadName": "Annual Exam",
        "fineAmount": 0
    }
]

I want to match array element by another array, for example:

let match= [1022692502, 1012182502]

In this case expected result is:

[
    {
        "fineAmount": 20
    },
    {
        "fineAmount": 0
    }
]

How can I do this?

2
  • 2
    None of the value in match is matching with feeSubHeadId in myvalue Commented Mar 24, 2019 at 10:12
  • Sorry, Fixed Now Commented Mar 24, 2019 at 10:16

4 Answers 4

3

You should try doing this using Array.filter & Array.map. The Array.filter will test whether the feeSubHeadId is included in the match.

Then you can proceed to extract the fineAmount property in the Array.map.

let myvalue= [
    {
        "feeSubHeadId": 1022692502,
        "feeSubHeadName": "Quiz-01",
        "fineAmount": 20
    },
    {
        "feeSubHeadId": 1012182502,
        "feeSubHeadName": "Half Yearly Exam",
        "fineAmount": 0
    },
    {
        "feeSubHeadId": 1022682502,
        "feeSubHeadName": "Quiz-02",
        "fineAmount": 0
    },
    {
        "feeSubHeadId": 1012192502,
        "feeSubHeadName": "Annual Exam",
        "fineAmount": 0
    }
];
let match= [1022692502, 1012182502];
const matchedItems = myvalue.filter(({feeSubHeadId}) => match.includes(feeSubHeadId)).map(({fineAmount})=> ({fineAmount}));
console.log(matchedItems);

We could use Array.from also, the first parameter is the filtered array the second one will map it to the new object:

let myvalue= [
    {
        "feeSubHeadId": 1022692502,
        "feeSubHeadName": "Quiz-01",
        "fineAmount": 20
    },
    {
        "feeSubHeadId": 1012182502,
        "feeSubHeadName": "Half Yearly Exam",
        "fineAmount": 0
    },
    {
        "feeSubHeadId": 1022682502,
        "feeSubHeadName": "Quiz-02",
        "fineAmount": 0
    },
    {
        "feeSubHeadId": 1012192502,
        "feeSubHeadName": "Annual Exam",
        "fineAmount": 0
    }
];
let match= [1022692502, 1012182502];
const matchedItems = Array.from(myvalue.filter(({feeSubHeadId}) => match.includes(feeSubHeadId)),
                    ({fineAmount}) => ({fineAmount}));
console.log(matchedItems);

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

Comments

1

You could use reduce to do this

const res = myvalue.reduce((a, {feeSubHeadId, fineAmount}) => 
    match.includes(feeSubHeadId) ? a.concat({fineAmount}) : a,[]
);
console.log(res);
<script>
let myvalue= [
  {
    "feeSubHeadId": 1022692502,
    "feeSubHeadName": "Quiz-01",
    "fineAmount": 20
  },
  {
    "feeSubHeadId": 1012182502,
    "feeSubHeadName": "Half Yearly Exam",
    "fineAmount": 0
  },
  {
    "feeSubHeadId": 1022682502,
    "feeSubHeadName": "Quiz-02",
    "fineAmount": 0
  },
  {
    "feeSubHeadId": 1012192502,
    "feeSubHeadName": "Annual Exam",
    "fineAmount": 0
  }
];
let match= [1022692502, 1022682502];
</script>

Comments

1

You can simply use reduce and includes

let myvalue = [{"feeSubHeadId": 1022692502,"feeSubHeadName": "Quiz-01","fineAmount": 20},{"feeSubHeadId": 1012182502,"feeSubHeadName": "Half Yearly Exam","fineAmount": 0},{"feeSubHeadId": 1022682502,"feeSubHeadName": "Quiz-02","fineAmount": 0},{"feeSubHeadId": 1012192502,"feeSubHeadName": "Annual Exam","fineAmount": 0}]

let match= [1022692502, 1012182502]

let op = myvalue.reduce((op,{feeSubHeadId,fineAmount}) => {
  if(match.includes(feeSubHeadId)){
    op.push({fineAmount})
  }
  return op
},[])

console.log(op)

Comments

1

Use Array#filter method to filter out required values and then use Array#map method to format the array element.

var res = myvalue
  // filter out elements
  .filter(({ feeSubHeadId }) => match.includes(feeSubHeadId))
  // format array elements
  .map(({ fineAmount }) => ({ fineAmount }));

let myvalue= [
    {
        "feeSubHeadId": 1022692502,
        "feeSubHeadName": "Quiz-01",
        "fineAmount": 20
    },
    {
        "feeSubHeadId": 1012182502,
        "feeSubHeadName": "Half Yearly Exam",
        "fineAmount": 0
    },
    {
        "feeSubHeadId": 1022682502,
        "feeSubHeadName": "Quiz-02",
        "fineAmount": 0
    },
    {
        "feeSubHeadId": 1012192502,
        "feeSubHeadName": "Annual Exam",
        "fineAmount": 0
    }
]
let match= [1022692502, 1012182502]


var res = myvalue
  .filter(({ feeSubHeadId }) => match.includes(feeSubHeadId))
  .map(({ fineAmount }) => ({ fineAmount }));
  
console.log(res);

Or with Array#reduce method you can combine both.

var res = myvalue
  // iterate and push into array if id found
  .reduce((arr, { feeSubHeadId,fineAmount }) => {
    if (match.includes(feeSubHeadId)) arr.push({ fineAmount: fineAmount });
    // return array reference for next iteration
    return arr;
    // set intial value as empty array for result
  }, []);

let myvalue= [
    {
        "feeSubHeadId": 1022692502,
        "feeSubHeadName": "Quiz-01",
        "fineAmount": 20
    },
    {
        "feeSubHeadId": 1012182502,
        "feeSubHeadName": "Half Yearly Exam",
        "fineAmount": 0
    },
    {
        "feeSubHeadId": 1022682502,
        "feeSubHeadName": "Quiz-02",
        "fineAmount": 0
    },
    {
        "feeSubHeadId": 1012192502,
        "feeSubHeadName": "Annual Exam",
        "fineAmount": 0
    }
]

let match= [1022692502, 1012182502]


var res = myvalue
  .reduce((arr, { feeSubHeadId,fineAmount }) => {
    if (match.includes(feeSubHeadId)) arr.push({ fineAmount: fineAmount });
    return arr;
  }, []);

console.log(res);

For extracting object properties I'd used ES6 Destructuring assignment feature.

1 Comment

On side note you can simply do {fineAmount} instead of { fineAmount: fineAmount }

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.