javascript - 在 javascript 中过滤和循环非数组平面 JSON 对象
问题描述
我有以下 JSON,我将其用作 javascript 的某种枚举等效项:
const blah = {
IV: {
name: "dIV",
value: 1
},
III: {
name: "dIII",
value: 2
},
II: {
name: "dII",
value: 3
},
I: {
name: "dI",
value: 4
}
};
我想过滤所有对象value
,然后能够遍历结果。我试图做类似的事情:
let result = blah.find(x => x.value > 2);
result.each(function () {
console.log(this)
}
但这不起作用并抛出:blah.find is not a function.
预期的输出将包含两个元素:
II: { name: "dII", value: 3},
I: { name: "dI", value: 4}
我在 Internet 上找到的大多数示例都使用 JSON 结构中的数组。是否有任何选项可以实现我想要的,或者我需要修改 JSON 结构并使用数组?干杯
解决方案
您可以使用循环遍历每个对象键(可枚举属性)的简单方法来迭代您的对象(注意,它是 javascript 文字对象,而不是 JSON)for...in
,对我来说,这是最可控和可读的方式,但是有很多更多,正如您在其他人的答案中看到的那样。
const blah = {IV: {name: "dIV", value: 1}, III: {name: "dIII", value: 2}, II: { name: "dII", value: 3}, I: {name: "dI", value: 4}};
let result = []
for (let key in blah){
let object = blah[key]
if (object.value > 2){
result.push(object)
}
}
console.log(result)
另一种可能性是使用Object.values
(将对象中的所有值返回到数组中)
和Array.filter
(顾名思义),这是更少的代码和更“优雅”:
const blah = {IV: {name: "dIV", value: 1}, III: {name: "dIII", value: 2}, II: { name: "dII", value: 3}, I: {name: "dI", value: 4}};
let result = Object.values(blah).filter(x => x.value > 2)
console.log(result)
推荐阅读
- select - SELECT max(date) 返回最新记录但数据错误
- oracle - 在oracle中用count和sum连接三个表
- postman - 邮递员不为 PaymentsOS 工作(授权不工作)
- html - 创建具有较少边框的表格
- python - 对 Pandas 列中的元素应用函数,分组到另一列
- unity3d - Text Mesh Pro UGUI 对象在播放模式下消失,Unity 版本 2019.3.5fl 个人版
- javascript - 我可以将对象的所有键声明为变量吗?
- bash - 无法识别永久环境变量
- html - 单击时隐藏图像序列;完成后再次显示
- tcl - 打印多行而不是单行