gpt4 book ai didi

javascript - 使用 Underscore.JS 进行深度采摘

转载 作者:行者123 更新时间:2023-11-30 11:50:00 24 4
gpt4 key购买 nike

我正在尝试使用 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 数组返回所需的对象。

Lodash (下划线的一个分支)提供了一种获取对象属性的方法,该方法在这里非常方便(遗憾的是,下划线没有)。

findCallIndexInParent的解释如下:

  1. 链接父列表
  2. 获取资源数组
  3. 作为 pluck 映射,它返回一个列表列表,因此需要展平。
  4. 找到calls包含call的元素的索引
  5. 返回parent 中包含call 的对象的值(索引)。

这是 fiddle .希望对您有所帮助。

关于javascript - 使用 Underscore.JS 进行深度采摘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39754131/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com