これはおそらく以前にかなりの回数尋ねられたことがありますが、適切な解決策を見つけるのに苦労しています.
これに似た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
}]);
これは大規模なアプリケーションの奥深くに埋もれてしまうため、スコープを簡単に操作できるようにアイテムのキーをすばやく取得する方法が必要でした。