【发布时间】:2022-01-09 04:53:02
【问题描述】:
我正在尝试过滤嵌套对象的值,并根据结果重建它。我在穿过这个物体时遇到了很多麻烦,但我已经接近了这么远。对象如下所示:
var files = {
"All": [
{
"isPublic": true,
"Files": [
{
"Filename": "A",
"Download": true
},
{
"Filename": "B",
"Download": true
}
]
},
{
"isPublic": true,
"Files": [
{
"Filename": "A",
"Download": true
}
]
},
{
"isPublic": false,
"Files": [
{
"Filename": "C",
"Download": false,
}
]
}
]
};
我想在这个数组中找到所有具有文件名的文件:
var filenames = ["A","C"];
我试过(ES5):
test = files['All'].filter(function (obj) {
return obj.Files.some(function (file) {
if(arr.includes(file.Filename)) {
return file.Filename;
}
});
});
console.log(test);
结果是:
[[object Object] {
Files: [[object Object] {
Download: true,
Filename: "A"
}, [object Object] {
Download: true,
Filename: "B"
}],
isPublic: true
}, [object Object] {
Files: [[object Object] {
Download: true,
Filename: "A"
}],
isPublic: true
}, [object Object] {
Files: [[object Object] {
Download: false,
Filename: "C"
}],
isPublic: false
}]
当Files 中只有一个文件名时,这就像一个魅力。但正如您在第一个对象中看到的那样,有时会有多个文件名。它失败了,因为在结果中也返回了 B。以下部分不应退回。
[object Object] {
Download: true,
Filename: "B"
}],
知道如何实现这一目标吗?
我在这里打开了一个 JS-bin:https://jsbin.com/goyamumuve/1/edit?js,console
【问题讨论】:
-
“我试过过滤器、循环成循环、地图等” 请展示你的尝试。你应该检查
some。 -
你能告诉我们预期的输出吗?
-
您是要过滤文件数组,还是通过包含在文件数组中来过滤顶级数组?
-
这与 JSON 有什么关系?该代码不是有效的 JSON,即使没有
var files =和; -
我建议提出一个新问题。这个问题被否决,关闭,回答并且有一个接受的答案。无法添加答案(因为它已关闭)并且大多数人认为,这里的问题已解决(因为已接受答案)。
标签: javascript arrays object filter