这可能已经被问过很多次了,但我很难找到一个像样的解决方案。
我有一个类似于这个的 mongo 查询的 JSON 结果:
var data = [{ _id: 123, name: "Test"}, { _id: 124, name: "Test2" }]
这是我拥有的数据的一个非常简单的版本,我需要能够在数组中找到与“_id”属性匹配的对象,例如
data.find({ _id: 123 }); // returns 0
data.find({ _id: 124 }); // returns 1
如果有人知道对此的良好解决方案,将不胜感激。
更新:
我使用@Rocket Hazmat 提供的答案为 Angular 创建了一个简洁的小模块。由于我正在处理对象,因此我想要一种以类似于 mongo 的方式查询 json 的方法。
angular.module("myModule").factory("obj", function() {
return {
findKey: function(query, data) {
for (var i = 0, l = data.length; i < l; i +=1) {
var item = data[i],
match = true;
// Check each object
for (var x in query) {
if (item[x] !== data[x]) {
match = false;
break;
}
}
// Did it match ?
if (match) {
return i;
}
}
return false;
}
}
});
然后我可以在我的控制器中使用它:
angular.module("myModule")
.controller("mainCtrl", ["$scope", "obj", function($scope, $obj) {
// This would be the result of an ajax request
$scope.people = [
{ _id: 1, name: "Test1" },
{ _id: 2, name: "Test2" },
{ _id: 3, name: "Test3" }
];
$obj.findKey({ _id: 1, name: "Test1" }, $scope.people); // 0
$obj.findKey({ _id: 2 }, $scope.people); // 1
$obj.findKey({ name: "Test2"}, $scope.people); // 1
$obj.findKey({ _id: 3, name: "Test3" }, $scope.people); // 2
$obj.findKey({ _id: 3, name: "Test1" }, $scope.people); // false
}]);
这将深埋在一个大型应用程序中,我需要一种快速的方法来获取项目的密钥,以便我可以轻松地操纵范围