从JavaScript对象中筛选出键
我有一个JavaScript对象,格式如下从JavaScript对象中筛选出键,javascript,jsonpath,Javascript,Jsonpath,我有一个JavaScript对象,格式如下 { "Node1": [ { "Node2": "node2detail1", "Node3": "node3detail1", "Node4": [ "node4detail1", ] }, { "Node2": "node2detail2", "Node3": "node3detail2", "Node4": [ "node4de
{
"Node1": [
{
"Node2": "node2detail1",
"Node3": "node3detail1",
"Node4": [
"node4detail1",
]
},
{
"Node2": "node2detail2",
"Node3": "node3detail2",
"Node4": [
"node4detail2",
]
},
{
"Node2": "node2detail3",
"Node3": "node3detail3",
"Node4": [
"node4detail3",
]
}
]}
是否可以编写一个jsonpath表达式,从而生成以下格式的JavaScript对象?
其目的是通过键进行过滤
{
"Node1": [
{
"Node2": "node2detail1",
"Node3": "node3detail1",
},
{
"Node2": "node2detail2",
"Node3": "node3detail2",
},
{
"Node2": "node2detail3",
"Node3": "node3detail3",
}
]}
Jsonpath用于提取值,而不是过滤JavaScript对象。您可以使用以下方法过滤对象:
{Node1: obj.Node1.map(function(o) { return {Node2: o.Node2, Node3: o.Node3}; })}
如果您喜欢使用下划线,则有。选择:
{Node1: _.map(obj.Node1, function(o) { return _.pick(o, 'Node2', 'Node3'); })}
如果您喜欢ES6/Harmony,请使用简化的对象文字语法将映射函数定义为带解构参数和隐式返回值的箭头函数:
{Node1: obj.Node1.map(({Node2, Node3}) => ({Node2, Node3}))}
破坏性变换:
obj.Node1.forEach(function(o) { delete o.Node4; })
如果您喜欢,可以使用JSON.stringify
的属性过滤功能。数组指定要序列化为JSON字符串的键;其他人则被忽视
JSON.parse(JSON.stringify(obj, ['Node1', 'Node2', 'Node3']))
或者您可以指定一个替换函数(获取键和值参数)并通过返回undefined
杀死Node4
,这意味着跳过该键及其值:
JSON.parse(JSON.stringify(obj, function(k, v) { if (k !== 'Node4') return v; }))
Jsonpath用于提取值,而不是过滤JavaScript对象。您可以使用以下方法过滤对象:
{Node1: obj.Node1.map(function(o) { return {Node2: o.Node2, Node3: o.Node3}; })}
如果您喜欢使用下划线,则有。选择:
{Node1: _.map(obj.Node1, function(o) { return _.pick(o, 'Node2', 'Node3'); })}
如果您喜欢ES6/Harmony,请使用简化的对象文字语法将映射函数定义为带解构参数和隐式返回值的箭头函数:
{Node1: obj.Node1.map(({Node2, Node3}) => ({Node2, Node3}))}
破坏性变换:
obj.Node1.forEach(function(o) { delete o.Node4; })
如果您喜欢,可以使用JSON.stringify
的属性过滤功能。数组指定要序列化为JSON字符串的键;其他人则被忽视
JSON.parse(JSON.stringify(obj, ['Node1', 'Node2', 'Node3']))
或者您可以指定一个替换函数(获取键和值参数)并通过返回undefined
杀死Node4
,这意味着跳过该键及其值:
JSON.parse(JSON.stringify(obj, function(k, v) { if (k !== 'Node4') return v; }))
这太彻底了,这太彻底了。