javascript - 过滤嵌套的 JSON
问题描述
我有一个结构如下的 JSON 对象:
var x = {
zy5EwY0caL3rPk4PXyX3: { name: 'Bob', completedDate: '2019-03-27T01:56:27.589Z'},
zy4HsKbHYZKtZNBMHdxu: { name: 'Tom', completedDate: '2019-04-10T01:56:27.589Z'},
zy0VPwMY51ksZaTFFIxL: { name: 'Jim', completedDate: '2019-05-01T01:56:27.589Z'},
zw6Xmv5PiNE4dmC19q2p: { name: 'Joe', completedDate: '2019-05-02T01:56:27.589Z'}
}
我想在节点脚本中运行一些 javascript 来过滤并仅返回完成数据在过去 10 天内的对象并返回以下内容。
var filteredData = {
zy0VPwMY51ksZaTFFIxL: { name: 'Jim', completedDate: '2019-05-01T01:56:27.589Z'},
zw6Xmv5PiNE4dmC19q2p: { name: 'Joe', completedDate: '2019-05-02T01:56:27.589Z'}
}
我遇到了问题,因为数据是嵌套的。我试过在下划线中使用 .where 函数,但我不知道让它检查嵌套元素的语法。
有没有一种简单的方法可以得到我想要的?
解决方案
因为您的源数据不是数组,所以不能使用Array.filter
.
所以你可以做的是使用Object.entries
迭代然后放入另一个对象。
下面是一个简单的例子。
const x = {
zy5EwY0caL3rPk4PXyX3: { name: 'Bob', completedDate: '2019-03-27T01:56:27.589Z'},
zy4HsKbHYZKtZNBMHdxu: { name: 'Tom', completedDate: '2019-04-10T01:56:27.589Z'},
zy0VPwMY51ksZaTFFIxL: { name: 'Jim', completedDate: '2019-05-01T01:56:27.589Z'},
zw6Xmv5PiNE4dmC19q2p: { name: 'Joe', completedDate: '2019-05-02T01:56:27.589Z'}
};
const day = 1000 * 60 * 60 * 24;
//const now = Date.now();
//let's set a date time, so snippet will continue to work
//in the future, but Date.now() would be use
//for current time
const now = new Date("2019-05-08T14:29:27.589Z");
const ret = {};
for (const [k, v] of Object.entries(x)) {
const tmc = new Date(v.completedDate);
const diff = Math.abs(tmc.getTime() - now);
if (diff < 10 * day) ret[k] = v;
}
console.log(ret);
推荐阅读
- specman - Specman e:如何将变量中的详细信息传递给 message() 操作?
- mvvm - 无法将 EventTriggerBehavior 与 ScrollViewer 的 ViewChanged 事件一起使用
- java - 如何在 Java 中实现 HashMap 数据结构?
- python - 根据列表重置索引
- python - 如何从python中的gpg签名中获取指纹或key_id?
- r - 从向量中删除 n 个最小的元素,包括重复元素
- php - PHP MS SQL Count 行数为空
- javascript - 带有嵌套对象的过滤器数组Angular 5
- html - 在表单中排列输入
- php - PHP - 如果达到会话超时,则阻止用户在网站中的操作