Is there a way to check if two arrays have the same elements?

前端 未结 4 1816
名媛妹妹
名媛妹妹 2021-01-18 04:56

Let say I have 2 arrays

firstArray  = [1, 2, 3, 4, 5];
secondArray = [5, 4, 3, 2, 1];

I want to know if they contain the same elements, whi

相关标签:
4条回答
  • 2021-01-18 05:40

    Well there is an Array.sort() method in JavaScript, and for comparing the (sorted) arrays, I think it's best to check out this question, as it is has a really good answer.

    Especially note that comparing arrays as strings (e.g. by JSON.stringify) is a very bad idea, as values like "2,3" might break such a check.

    0 讨论(0)
  • 2021-01-18 05:40

    Not in Vanila Javascript but in Angular there is option to match two objects.

    angular.equals([1,2,3],[1,2,3])
    

    Determines if two objects or two values are equivalent. Supports value types, regular expressions, arrays and objects.

    See if this could help you.

    alert("Match result of [1,2,3] &  [1,2,3] is "+angular.equals([1,2,3],[1,2,3]));
    
    alert("Match result of [1,4,3] &  [1,2,3] is "+angular.equals([1,4,3],[1,2,3]));
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

    Click on Run Code snippet. If this solves your need please mark it as as Answer :)

    In case order is not important and array is of number type.

    var a1 = [1, 2, 3];
    var a2 = [2, 1, 3];
    //In case order is not important and array is of number type.
    alert(eval(JSON.stringify(a1).replace(/,/g, "+").replace(/\[/g, "").replace(/\]/g, "")) === eval(JSON.stringify(a2).replace(/,/g, "+").replace(/\[/g, "").replace(/\]/g, "")));

    0 讨论(0)
  • 2021-01-18 05:57

    Here's a working implementation using Vanilla JS:

    function haveMatchingElements(firstArray, secondArray) {
        var stringsInFirstArray = parse(firstArray, 'string'),
            stringsInSecondArray = parse(secondArray, 'string'),
            numbersInFirstArray = parse(firstArray, 'number'),
            numbersInSecondArray = parse(secondArray, 'number'),
            stringResults = compare(stringsInFirstArray, stringsInSecondArray),
            numberResults = compare(numbersInFirstArray, numbersInSecondArray);
    
        if (stringResults && numberResults) {
            return true;
        } return false;
    
        function parse(array, type) {
            var arr = [];
            arr = array.sort().filter(function(index) {
                if (typeof index == type)
                    return index;
            });
            return arr;
        }
    
        function compare(firstArray, secondArray) {
            if (firstArray.length !== secondArray.length)
                return false;
            for (var i = firstArray.length; i--;) {
                if (firstArray[i] !== secondArray[i])
                    return false;
            }
            return true;
        }
    }
    

    This parses strings an numbers into different arrays and checks them separately. That will correct the issue of 1 and "1" matching as true due to the implicit type conversion caused by the sort function.

    The implementation is simple:

    var arr1 = ['1', 1];
    var arr2 = [1, '1'];
    
    var results = haveMatchingElements(arr1, arr2);
    console.log(results); // true  
    
    0 讨论(0)
  • 2021-01-18 06:00

    Using jQuery

    You can compare the two arrays using jQuery:

    // example arrays:
    var firstArray  = [ 1, 2, 3, 4, 5 ];
    var secondArray = [ 5, 4, 3, 2, 1 ];
    
    // compare arrays:
    var isSameSet = function( arr1, arr2 ) {
      return  $( arr1 ).not( arr2 ).length === 0 && $( arr2 ).not( arr1 ).length === 0;  
    }
    
    // get comparison result as boolean:
    var result = isSameSet( firstArray, secondArray );
    

    Here is a JsFiddle Demo

    See this question helpful answer

    0 讨论(0)
提交回复
热议问题