Javascript 使用下划线.JS进行深度拾取
我试图使用下划线来操作JavaScript对象,但在操作时遇到了问题 这是我的例子Javascript 使用下划线.JS进行深度拾取,javascript,underscore.js,lodash,Javascript,Underscore.js,Lodash,我试图使用下划线来操作JavaScript对象,但在操作时遇到了问题 这是我的例子 var数据={ “标签”:“SomeName”, “家长”:[{ “id”:“parentId”, “资源”:[{ “名称”:“ID1NAME”, “电话”:[ “用户获取”、“用户2发布”、“用户3删除” ] }, { “名称”:“ID2”, “电话”:[ “员工1获取”、“员工2删除”、“员工3更新” ] }] }] }; var res=(数据).chain()。 拔毛(“父”)。 展平()。 findW
var数据={
“标签”:“SomeName”,
“家长”:[{
“id”:“parentId”,
“资源”:[{
“名称”:“ID1NAME”,
“电话”:[
“用户获取”、“用户2发布”、“用户3删除”
]
}, {
“名称”:“ID2”,
“电话”:[
“员工1获取”、“员工2删除”、“员工3更新”
]
}]
}]
};
var res=(数据).chain()。
拔毛(“父”)。
展平()。
findWhere(功能(项目){
item==“用户获取”
}).
value();
控制台日志(res)代码>这似乎可以达到目的
函数findByCall(数据,调用){
返回u.find(data.parent,函数(parent){//从data.parent列表中,查找
return u.some(parent.resources,function(resource){//具有这样的parent.resource
return u.includes(resource.calls,call);//包括搜索到的resource.calls项
});
});
}
//试验
风险值数据={
“标签”:“SomeName”,
“家长”:[{
“id”:“parentId”,
“资源”:[{
“名称”:“ID1NAME”,
“电话”:[
“用户获取”、“用户2发布”、“用户3删除”
]
}, {
“名称”:“ID2”,
“电话”:[
“员工1获取”、“员工2删除”、“员工3更新”
]
}]
}]
};
log(findByCall(数据'user_get'))代码>
您遇到的一个问题是使用\uu.pull
。如果在对象上执行。
,它将遍历对象的键,试图检索指定为第二个参数的属性(在本例中为“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
(它将检索调用所在的索引),并返回所需的对象和父数组
(下划线的分支)提供了一个方法来获取一个对象的属性,而这个属性在这里非常方便(遗憾的是,下划线没有)
findCallIndexInParent
的解释如下:
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));
链接父列表
获取资源数组
作为Pull贴图,它返回一个列表列表,因此需要展平
查找调用包含调用的元素的索引
返回父对象中包含调用的对象的值(索引)
这是我的建议。希望有帮助。如果我理解正确,您希望获得父数组中元素的索引,该数组具有指定调用的任何资源
数据={
“标签”:“SomeName”,
“家长”:[{
“id”:“parentId”,
“资源”:[{
“名称”:“ID1NAME”,
“电话”:[
“用户获取”、“用户2发布”、“用户3删除”
]
}, {
“名称”:“ID2”,
“电话”:[
“员工1获取”、“员工2删除”、“员工3更新”
]
}]
}]
}
//查找父级的索引
const index=uu.findIndex(data.parent,parent=>
//那有(一些)资源吗
_.some(parent.resources,resource=>
//在其调用列表中包含“user_get”调用的
_.contains(resource.calls“user\u get”)
)
)
console.log(索引)//0
您是否有机会将JSON包装到数组中?由于下划线使用的是集合(集合中确实包含一个容纳所有类型对象的数组),因此将JSON写入数组将解决您的问题@谢谢你的建议。我当然知道parse和JSON的含义。我可能错误地使用了parse这个词,但我将其称为JSON文档的意图是正确的,因为我一直在处理JSON文档。我给出了一个例子,跳过了将JSON文档解析为Javascript对象的部分。另外,恕我直言,你们用的词是不正确的,摘录就好了。我尊重别人:)我感谢你的帮助。谢谢你清楚的解释。感谢您的时间和帮助。