gpt4 book ai didi

javascript - "pickBy"对象的值数组中的值

转载 作者:行者123 更新时间:2023-11-28 13:01:35 27 4
gpt4 key购买 nike

我有一个看起来像这样的对象:

let documents = {"A": [{"document":"test1", "serial":"123"}, {"document":"test2", "serial":"456N"}], "B": [{"document":"test3", "serial":"789N"}, {"document":"test24, "serial":"012"}]};

我试图获取序列号以“N”结尾的过滤对象:

{"A": [{"document":"test2", "serial":"456N"}, "B": [{"document":"test3", "serial":"789N"}]}

我在做:

 let result = _.pickBy(documents, (docObjs, client) => {
return _.filter(docObjs, ({serial}) => {
return _.endsWith(serial, 'N');
});
});

但我得到的是原始对象(与documents相同)。有什么问题吗?

最佳答案

洛达什

使用 _.transform() 迭代客户端的对象。对于每个客户端, filter 使用 _.endsWith() 的文档列表。如果文档列表不是empty(长度为0),则将具有过滤文档列表的客户端分配给结果对象:

// added client C that will be filtered out
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 = _.transform(documents, (r, v, k) => {
const docs = _.filter(v, ({ serial }) => _.endsWith(serial, 'N'));
if(!_.isEmpty(docs)) r[k] = docs;
});

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>

普通 JS

使用 Object.entries() 获取客户端/文档对的数组。使用 Array.map()Array.filter() 删除所有序列号不为 String.endsWith() 字母 N 的文档。使用 Array.filter() 删除所有包含 0 个文档的条目。使用 Array.reduce() 转换回对象:

// added client C that will be filtered out
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 = Object.entries(documents)
// filter the least of documents in each client entry
.map(([k, v]) => [k, v.filter(({ serial }) => serial.endsWith('N'))])
// filter clients that have 0 documents
.filter(([k, v]) => v.length)
// convert back to an object
.reduce((r, [k, v]) => (r[k] = v, r), {});

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>

关于javascript - "pickBy"对象的值数组中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49944849/

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