将一个数组值与另一个数组进行比较

时间:2015-09-15 13:07:27

标签: javascript arrays angularjs

我有一个数组,其值如:

userID: ["55f6c3639e3cdc00273b57a5", 
        "55f6c36e9e3cdc00273b57a6", "55f6c34e9e3cdc00273b57a3"];

$scope.userList : [Object, Object, Object, Object, Object], 

其中每个对象都有一个我正在比较的ID属性。

我想比较userList数组中是否存在每个userID数组值。

$scope.userInfo = function(userID) {
    var userDetails = [];
    for (var i = 0; i < $scope.userList.length; i++) {
        (function(i) {
            for (var j = i; j < userID.length; j++) {
                if ($scope.userList[i]._id === userID[j]) {
                    userDetails.push($scope.userList[i]);
                }
            }
        })(i)
    }
    return userDetails;
};

我面临的问题是数组中的每个userID,我想将它与userList对象中要匹配的所有项进行比较。

以上代码无效。它不是将每个数组值与整个对象进行比较。

3 个答案:

答案 0 :(得分:1)

试试这个

$scope.userInfo = function(userID) {
        var userDetails = [];
        for (var i = 0; i < $scope.userList.length; i++) {       
                for (var j = 0; j < userID.length; j++) {
                    if ($scope.userList[i]._id === userID[j]) {
                        userDetails.push(userID[j]);
                    }
                }       
        }
        return userDetails;
    };

if语句

上的这一行的变化
var j = 0;

 userDetails.push(userID[j]);

答案 1 :(得分:1)

您应该尝试使用https://github.com/intersystems-ru/cache-tort-git/wiki

JS:

        KeyStore root = KeyStore.getInstance("KeychainStore", "Apple");
        root.load(null);
        /* certificate must be DER-encoded */
        FileInputStream in = new FileInputStream("yourcertificate.cer");
        X509Certificate cacert = (X509Certificate)CertificateFactory.getInstance("X.509").generateCertificate(in);
        root.setCertificateEntry("certificatealiasname", cacert);
        root.store(null, null);

$filter

答案 2 :(得分:1)

不是使用2个嵌套循环,而是将$scope.userList转换为以userID为键的对象。然后,您可以循环遍历userID数组,并快速检查新对象中是否存在具有相同键的用户。

通过删除嵌套循环,下面的代码以线性时间而不是n ^ 2运行,如果您有大型数组,这将是有益的。如果将$scope.userList存储为由userId键入的对象,则每次运行该函数时不必创建索引就可以节省更多时间。

$scope.userInfo = function(userID) {

    var userList = {};

    //create object keyed by user_id
    for(var i=0;i<$scope.userList.length;i++) {
        userList[$scope.userList._id] = $scope.userList;
    }

    //now for each item in userID, see if an element exists
    //with the same key in userList created above

    var userDetails = [];
    for(i=0;i<userID.length;i++) {
        if(userID[i] in userList) {
            userDetails.push(userList[userID[i]]);
        }
    }

    return userDetails;
};