javascript – 按值查找嵌套对象并返回找到的对象键
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 按值查找嵌套对象并返回找到的对象键,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1859字,纯文字阅读大概需要3分钟。
内容图文
这可能已经被问了很多次,但我找不到合适的解决方案.
我有一个类似于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提供的答案为角度创建一个整洁的小模块.由于我正在使用对象,我想要一种以类似于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
}]);
这将被埋在一个大型应用程序的深处,我需要一个快速的方法来获取项目的键,以便我可以轻松地操作范围
解决方法:
你需要循环遍历数组并比较每个对象,看它是否包含你正在寻找的密钥.
这是我快速入侵的东西.
Array.prototype.find = function(obj){
// Loop through array
for(var i = 0, len = this.length; i < len; i++){
var ele = this[i],
match = true;
// Check each object
for(var x in obj){
if(ele[x] !== obj[x]){
match = false;
break;
}
}
// Did it match?
if(match){
return i;
}
}
};
然后就像你展示的那样运行它:
data.find({ _id: 124 }); // 1
内容总结
以上是互联网集市为您收集整理的javascript – 按值查找嵌套对象并返回找到的对象键全部内容,希望文章能够帮你解决javascript – 按值查找嵌套对象并返回找到的对象键所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。