在另一个数组中搜索数组元素

时间:2015-04-24 13:20:09

标签: javascript arrays angularjs

在我的情况下,我有一个数组对象$scope.folderfiles。我从列表中选择了一些文件,我希望在folderfiles中获得所选文件的索引。我做到了这一点:

for (var i=0; i < $scope.selectedfiles.length; i++) {
    var pos = $scope.folderfiles.indexOf($scope.selectedfiles[i]);
    console.log(pos);
}

但我总是得到-1。当我绑定selectedfiles时,我得到了我已经选择的列表,其中包含在我的文件夹文件数组中

示例:

folderfiles: [{"id":135,"name":"dddd","mtime":1429881529000},{"id":136,"name":"qqq","mtime":1429881566000,"size":null}]

selectedfiles: [{"id":135,"name":"dddd","mtime":1429881529000}]

出了什么问题?

3 个答案:

答案 0 :(得分:0)

indexOf将检查占用内存中相同空间的两个对象。我认为在这种情况下你想要的是angular.equals(obj1, obj2)进行相等比较。

答案 1 :(得分:0)

folderfiles: [{"id":135,"name":"dddd","mtime":1429881529000},{"id":136,"name":"qqq","mtime":1429881566000,"size":null}]

selectedfiles: [{"id":135,"name":"dddd","mtime":1429881529000}]

出了什么问题?

indexOf在将对象应用于对象数组时比较对象的引用。

这样可行:

selectedfiles: [folderFiles[0]]

答案 2 :(得分:0)

如果您正在处理大量数组逻辑,我建议您使用lodash

_.intersection(selectedFiles, folderFiles).length;