2

I have an array like

selectedData = [{ Name = 'Michelle', LRN = '100011' }, { Name = 'Micheal', LRN = '100011' }, { Name = 'Mick', LRN = '100012' } // so on.... ] 

I am sending this array through a function and that simply checks if the LRN attribute of each object is same if not it throws error. I have written the function as -

createSet(selectedData) { this.selectedData.forEach (element => { //the condition } else { this.openSnackBar ("LRN mismatching"); } } 

How do I check if the LRN attribute of each object is same? I don't want loop unless I have to. I'm working with more than thousand records. I appreciate all the help. :)

1
  • 2
    There is no other way, you have to loop through all elements. If you even find some "one-liner" that gets the job done, that "one-liner" is looping through them too. and thousand records is not that much.
    – rosmak
    CommentedFeb 17, 2022 at 11:30

3 Answers 3

3

You could take Array#every and check the first item to each other. The method stops the iteration if the condition is false and returns then false, if not then true.

The callback's parameter can have three parts, one for the item, the next for the index and the third one has the reference to the array.

In this case only the item is used with a destructuring of LRN and the array. The unneeded index is denoted by an underscore, which is a valid variable name in Javascript.

if (!array.every(({ LRN }, _, a) => LRN === a[0].LRN)) { this.openSnackBar ("LRN mismatching"); } 

Code with example of all property LRN having the same value.

const selectedData = [{ Name: 'Michelle', LRN: '100011' }, { Name: 'Micheal', LRN: '100011'}, { Name: 'Mick', LRN: '100011' }]; if (!selectedData.every(({ LRN }, _, a) => LRN === a[0].LRN)) { console.log("LRN mismatching"); } else { // just to show console.log('OK'); }

Mismatching

const selectedData = [{ Name: 'Michelle', LRN: '100011' }, { Name: 'Micheal', LRN: '100011'}, { Name: 'Mick', LRN: '100012' }]; if (!selectedData.every(({ LRN }, _, a) => LRN === a[0].LRN)) { console.log("LRN mismatching"); } else { // just to show console.log('OK'); }

2
  • I couldn't understand the usage of LRN. I'm implementing this in my code but it shows error on passing LRN as argument.CommentedFeb 17, 2022 at 12:13
  • LRN is a property of the objects.CommentedFeb 17, 2022 at 12:18
0

An easy beginner-friendly solution would be:

function allLRNMatch(data) { if (data.length < 2) { return true; } const firstLRN = data[0].LRN; for (const element of data) { if (element.LRN !== firstLRN) { return false; } } return true; } 

You iterate through the array and check each element's LRN attribute with the first one. As soon you find a non-matching one, you can immediately return.

For a more functional approach, you could also use Array.prototype.some instead of the for loop to achieve this.

    0

    Sorry but there's no other way, you will need to loop through them to compare the value, once it's an array of objects, it would be different if it was a LRN array.

    On this case I would use it this way:

    const sameLrnArrPosition = []; checkLrn(arr, valueToBeCompared) { arr.forEach((element, index)=>{ if(element.lnr === valueToBeCompared){ sameLrnArrPosition.push(*here you can get the element or the index*); } }) } 

    This way you can have the objects that have the same value or the index, to acces them on the array and change a value or something.

    1
    • There isn't any value to be compared. I just need to check whether all values are same or not. But anyways, thanks a lot.CommentedFeb 17, 2022 at 12:40

    Start asking to get answers

    Find the answer to your question by asking.

    Ask question

    Explore related questions

    See similar questions with these tags.