- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个看起来像这样的对象:
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/
我有一个看起来像这样的对象: let documents = {"A": [{"document":"test1", "serial":"123"}, {"document":"test2", "se
你好,我有一个问题要使用 lodash 重构我的代码,我做了一个程序来计算一个对象的整数的平均值。我想使用 _.pickBy 而不是 _.each。 这是我的带有 _.each 的程序: var my
我正在尝试使用 "lodash": "^4.17.10" 来过滤一个对象。 请参阅下面我的最小可行示例: const obj = { "2": { "title": "GeFo
如何在 JavaScript 中制作 lodash 的 pickby 功能?我在“you don't need lodash”中找到了以下内容 function pickBy(object) {
我正在尝试将这个使用 pickBy 和 mapValues 的函数从 lodash 转换为不使用 lodash 的函数。 import mapValues from 'lodash/mapValues
一个简单的问题,我如何通过管道传递 pickBy 身份并包含值为零的 Prop 。目前这个例子会省略零 let linkType = { name: 'zac', money: 0,
我是一名优秀的程序员,十分优秀!