我正在尝试使用 underscoreJs 来操作 JavaScript 对象,但遇到问题。
这是我的例子
var data = {
"label": "SomeName",
"parent": [{
"id": "parentId",
"resources": [{
"name": "ID1NAME",
"calls": [
"user_get", "user2_post", "user3_delete"
]
}, {
"name": "ID2",
"calls": [
"employee1_get", "employee2_delete", "employee3_update"
]
}]
}]
};
var res = _(data).chain().
pluck('parent').
flatten().
findWhere(function(item){
item === "user_get"
}).
value();
console.log(res);
使用属于以下部分的元素data.parent.calls[]
(示例:“user_get”)我想提取其父对象,即data.parent[0]
.
我在上面尝试过但总是未定义。我很感谢对此的任何帮助。
您遇到的问题之一是您的使用_.pluck
。如果你执行_.pluck
在一个对象上,它将遍历该对象的键,尝试检索您指定为第二个参数的属性(在本例中,'parent'). 'label'是一个字符串并且'parent' 是一个数组,因此您得到的结果数组是[undefined, undefined]
。其余的就会出错。
一种解决方案可能如下:
function findCallIndexInParent(call, parent) {
return _.chain(parent)
.pluck('resources')
.flatten()
.findIndex(function (obj) {
return _.contains(obj.calls, call);
})
.value();
}
function findCall(call, data) {
var parent = data.parent;
return parent[findCallIndexInParent(call, parent)];
}
console.log(findCall('user_get', data));
findCall
只是一个方便的方法,将数据的父属性传递给findCallIndexInParent
(这将检索索引,其中call是)并返回所需的对象parent array.
Lodash https://lodash.com/(下划线的分叉)提供了一种获取对象属性的方法,该方法在这里非常方便(遗憾的是,下划线没有它)。
的解释findCallIndexInParent
如下:
- 链接父列表
- 提取资源数组
- 作为 pluck 映射,它返回一个列表列表,因此需要展平。
- 找到该元素的索引calls包含call
- 返回包含该对象的值(索引)call within parent.
这是fiddle https://jsfiddle.net/1f445pyg/。希望能帮助到你。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)