Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中过滤并循环通过非数组平面JSON对象_Javascript_Json - Fatal编程技术网

javascript中过滤并循环通过非数组平面JSON对象

javascript中过滤并循环通过非数组平面JSON对象,javascript,json,Javascript,Json,我有以下JSON,我使用它作为javascript的某种枚举等价物: const blah = { IV: { name: "dIV", value: 1 }, III: { name: "dIII", value: 2 }, II: { name: "dII", value: 3 }, I: { name: "dI",

我有以下JSON,我使用它作为javascript的某种枚举等价物:

const blah = {
    IV: {
        name: "dIV",
        value: 1
    },
    III: {
        name: "dIII",
        value: 2
    },
    II: {
        name: "dII",
        value: 3
    },
    I: {
        name: "dI",
        value: 4
    }
};
我想通过
值过滤所有对象,然后能够循环遍历结果。
我试着做一些类似的事情:

let result = blah.find(x => x.value > 2);
result.each(function () {
   console.log(this)
}
但这不起作用并抛出:
blah.find不是一个函数。
预期输出将包含两个元素:

II: { name: "dII", value: 3},
I: { name: "dI", value: 4}
我在Internet上找到的大多数示例都使用JSON结构中的数组。有什么选择吗 要实现我想要的,还是需要修改JSON结构并使用数组?
干杯

你可以用一个简单的循环遍历每个对象键(可枚举属性)来迭代你的对象(注意,它是一个javascript文本对象,而不是JSON),对我来说,这是最可控和可读的方式,但正如你在其他人的回答中看到的那样,还有很多

const blah={IV:{name:“dIV”,value:1},III:{name:“dIII”,value:2},II:{name:“dII”,value:3},I:{name:“dI”,value:4};
让结果=[]
对于(让输入blah){
让对象=废话[键]
如果(object.value>2){
结果。推送(对象)
}
}
console.log(结果)
尝试
对象.key(blah)

const blah={
四:{
姓名:"分区",
价值:1
},
三:{
名称:“dIII”,
价值:2
},
二:{
名称:“dII”,
价值:3
},
一:{
姓名:"dI",,
价值:4
}
};
var result=Object.keys(blah)
.filter(key=>blah[key].value>2)
.reduce((acc,key)=>({……acc,[key]:blah[key]}),{});

log(result)
您在示例中提供的实际上不是JSON(Javascript对象概念),而是一个Javascript对象,JSON序列化格式的诞生地

JavaScript对象更像字典,为结构化数据提供快速的键/值读/写。您无法对Javascript对象进行排序,因为它是无序的,这取决于Javascript引擎的实现(V8 for Chrome,Node.js,…)

您可以做的是,以数组的形式获取键/值/键+值的列表,并在数组上迭代,或者使用数组的值构造新对象,或者只是作为对象中存在的键列表的引用


请参阅Mozilla MDN上的Object.keys、Object.values和Object.entries。数组是有序的,可以排序和迭代。

我将使用Object.entries和reduce

const blah={
四:{
姓名:"分区",
价值:1
},
三:{
名称:“dIII”,
价值:2
},
二:{
名称:“dII”,
价值:3
},
一:{
姓名:"dI",,
价值:4
}
};
var result=Object.entries(blah).reduce((obj[key,props])=>{
如果(道具值>=3){
obj[key]=道具
}
返回obj
}, {})

console.log(result)
.find
数组的一部分。prototype
所以你不能在对象中使用它,比如
blah
预期的输出是对象数组还是另一个带键的对象?输出可以是数组,我不介意。我只需要循环浏览结果在看到Calvin Nunes的评论后,我看到有一个相当新的语法,在
中为…添加了
,我认为这是对
的糖衣。。。of Object.keys(obj)
奇怪这是选择的答案,因为它与我在expect output格式中询问OP的“预期输出”不匹配,OP说这无关紧要,可能是一个对象数组。。。所以,我做了一组对象。但不管怎样,我还是要投你的一票,因为我喜欢你的方法,而且我认为它也符合OP的结果