我已经在这里搜索了几个小时,但到目前为止还没有找到正确的答案。如果答案已经存在,我深表歉意。
我正在尝试过滤数组并仅返回具有特定键和任意值的对象。值是什么并不重要,只要该键不为空或 null 即可。
数组示例:
[
{
"title": "Song 1",
"author": "Joe",
"Album1": 2,
"Album2": null,
"Album3": 5
},
{
"title": "Song 2",
"author": "Jane",
"Album1": null,
"Album2": null,
"Album3": 8
},
{
"title": "Song 3",
"author": "Steve",
"Album1": 10,
"Album2": 1,
"Album3": null
}
]
我只想返回在 Album1
中具有值的对象(该值将是轨道编号)。我不在乎值是多少,只要有值就行。所以在这个例子中,只将以下内容返回到一个新数组中:
[
{
"title": "Song 1",
"author": "Joe",
"Album1": 2,
"Album2": null,
"Album3": 5
},
{
"title": "Song 3",
"author": "Steve",
"Album1": 10,
"Album2": null,
"Album3": null
}
]
我尝试了几种不同的方法,但都失败了。这是一个看起来应该起作用但不起作用的方法:
getFilteredSongs (array, album) {
return songs
.filter(function (obj) {
return Object.keys(album).every(function (a) {
return obj[a] === true
})
})
}
getFilteredSongs(songsList, Album1)
我非常感谢任何帮助以及对我的绿色技能和无法找到应该在那里的问题的耐心。
最佳答案
您需要做的就是返回 Album1
属性 - 如果 null
,结果数组将不会包含在结果中:
const songs = [
{
"title": "Song 1",
"author": "Joe",
"Album1": 2,
"Album2": null,
"Album3": 5
},
{
"title": "Song 2",
"author": "Jane",
"Album1": null,
"Album2": null,
"Album3": 8
},
{
"title": "Song 3",
"author": "Steve",
"Album1": 10,
"Album2": 1,
"Album3": null
}
];
const filtered = songs.filter(({ Album1 }) => Album1);
console.log(filtered);
或者,如果您愿意,无需解构:
const filtered = songs.filter(song => song.Album1);
或者,如果您使用 Album1
的 string 键调用 getFilteredSongs
:
const songs = [
{
"title": "Song 1",
"author": "Joe",
"Album1": 2,
"Album2": null,
"Album3": 5
},
{
"title": "Song 2",
"author": "Jane",
"Album1": null,
"Album2": null,
"Album3": 8
},
{
"title": "Song 3",
"author": "Steve",
"Album1": 10,
"Album2": 1,
"Album3": null
}
];
const getFilteredSongs = (songs, album) => songs.filter(song => song[album]);
console.log(getFilteredSongs(songs, 'Album1'));
关于javascript - 过滤 Javascript 数组并仅返回具有填充键的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54975487/