Javascript &引用;皮克比;对象的值数组中的值
我有一个对象看起来像:Javascript &引用;皮克比;对象的值数组中的值,javascript,lodash,Javascript,Lodash,我有一个对象看起来像: let documents = {"A": [{"document":"test1", "serial":"123"}, {"document":"test2", "serial":"456N"}], "B": [{"document":"test3", "serial":"789N"}, {"document":"test24, "serial":"012"}]}; 我试图获取序列号以“N”结尾的筛选对象: 我在做: let result = _.pickBy(do
let documents = {"A": [{"document":"test1", "serial":"123"}, {"document":"test2", "serial":"456N"}], "B": [{"document":"test3", "serial":"789N"}, {"document":"test24, "serial":"012"}]};
我试图获取序列号以“N”结尾的筛选对象:
我在做:
let result = _.pickBy(documents, (docObjs, client) => {
return _.filter(docObjs, ({serial}) => {
return _.endsWith(serial, 'N');
});
});
但我得到的是原始对象(与
文档
相同)。有什么问题吗?只要使用JSES6
,您就可以使用reduce
循环遍历对象键筛选
数组,并使用endsWith
检查字符串是否以N结尾
let documents={“A”:[{“document”:“test1”,“serial”:“123”},{“document”:“test2”,“serial”:“456N”}],“B”:[{“document”:“test3”,“serial”:“789N”},{“document”:“test24”,“serial”:“012”}]};
让结果=对象。键(文档)。减少((c,v)=>{
c[v]=文档[v].过滤器(o=>o.serial.endsWith(“N”);
返回c;
}, {});
控制台日志(结果)
只需使用JSES6
,就可以使用reduce
循环遍历对象键筛选
数组,并使用endsWith
检查字符串是否以N结尾
let documents={“A”:[{“document”:“test1”,“serial”:“123”},{“document”:“test2”,“serial”:“456N”}],“B”:[{“document”:“test3”,“serial”:“789N”},{“document”:“test24”,“serial”:“012”}]};
让结果=对象。键(文档)。减少((c,v)=>{
c[v]=文档[v].过滤器(o=>o.serial.endsWith(“N”);
返回c;
}, {});
控制台日志(结果)代码>洛达斯
使用迭代客户端对象。对于每个客户机,使用的文档列表。如果文档列表不是(长度为0),请将具有筛选文档列表的客户端分配给结果对象:
//添加了将被过滤掉的客户端C
const documents={“A”:[{“document”:“test1”,“serial”:“123”},{“document”:“test2”,“serial”:“456N”}],“B”:[{“document”:“test3”,“serial”:“789N”},{“document”:“test24”,“serial”:“012”}],“C”:[{“document”:“test25”,“serial”:“013”}];
const result=\转换(文档,(r,v,k)=>{
const docs=u.filter(v,({serial})=>uu.endsWith(serial,'N'));
如果(!.isEmpty(docs))r[k]=docs;
});
控制台日志(结果)代码>
Lodash
使用迭代客户端对象。对于每个客户机,使用的文档列表。如果文档列表不是(长度为0),请将具有筛选文档列表的客户端分配给结果对象:
//添加了将被过滤掉的客户端C
const documents={“A”:[{“document”:“test1”,“serial”:“123”},{“document”:“test2”,“serial”:“456N”}],“B”:[{“document”:“test3”,“serial”:“789N”},{“document”:“test24”,“serial”:“012”}],“C”:[{“document”:“test25”,“serial”:“013”}];
const result=\转换(文档,(r,v,k)=>{
const docs=u.filter(v,({serial})=>uu.endsWith(serial,'N'));
如果(!.isEmpty(docs))r[k]=docs;
});
控制台日志(结果)代码>
当您只有一个文档(一个对象)时,文档为什么是复数的?为什么client\u name
引用的值不止一个(一个数组)时是单数的?@user633183我更新了描述,这样就不会让您感到困惑。为什么文档
只有一个(对象)时是复数的?为什么client\u name
引用的值不止一个(一个数组)时是单数的?@user633183我更新了描述,这样就不会让你感到困惑。1)你在执行浅层克隆2)如果你在使用lodash,为什么不使用lodash的clone
?3) 你不需要克隆谢谢你。如果文档中有多个键
,我能知道该怎么办吗?我想这就解释了@user633183的问题:我写它们节省了一些时间,但实际对象有多个键和值。@user633183。是的,你是对的,我不需要克隆它,但在OP上希望输出像{client_name:[..]}
@jsh6303多个键是什么意思?:)你想同时过滤Eddie和Joe吗?1)你在执行浅层克隆2)如果你在使用lodash,为什么不使用lodash的克隆
?3) 你不需要克隆谢谢你。如果文档中有多个键
,我能知道该怎么办吗?我想这就解释了@user633183的问题:我写它们节省了一些时间,但实际对象有多个键和值。@user633183。是的,你是对的,我不需要克隆它,但在OP上希望输出像{client_name:[..]}
@jsh6303多个键是什么意思?:)你想过滤埃迪和乔吗?
let result = _.pickBy(documents, (docObjs, client) => {
return _.filter(docObjs, ({serial}) => {
return _.endsWith(serial, 'N');
});
});