我有一个数组,其值如:
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
对象中要匹配的所有项进行比较。
以上代码无效。它不是将每个数组值与整个对象进行比较。
答案 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);
答案 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;
};