![](/img/trans.png)
[英]How to loop through an array of objects and get specific key values in React?
[英]How do you loop through an array and only extract key:value that are specific values?
我想遍历现有对象,只提取特定键以添加到新数组中。
该对象看起来像:
let lyricsData = {
"success": true;
"length": 50;
"result": [
{
"id_track": 123,
"haslyrics": true,
"id_artrist": 234,
},
{
"id_track": 567,
"haslyrics": false,
"id_artrist": 678,
}
]
}
如果 "haslyrics" 为 true ,我只想提取结果。
这是我想出的代码块:
1 function findHasLyrics(lyricsData) {
2 if (lyricsData.length === 0) {
3 console.log("findHasLyrics", null);
4 } else {
5 let hasLyricsTrue = [];
6 for (let i=0; i<lyricsData.length; i++) {
7 if (lyricsData.result[i].haslyrics === true) {
8 hasLyricsTrue.push(lyricsData.result[i]);
9 };
10 console.log("findHasLyrics", hasLyricsTrue);
11 };
12 };
13 };
密码在哪里破解? 我将如何解决它?
提前致谢。
解决方案(已编辑)。 感谢@StepUp 和@Ankita。
我需要保留 if-else 语句。 歌词数据是动态的,有时长度为 0。在这种情况下,我需要通过函数传递一个空值。
function findHasLyrics(lyricsData) {
if (lyricsData.length === 0) {
displayLyricsApi(null);
} else {
function findHasLyrics(lyricsData) {
return lyricsData.result.filter(f => f.haslyrics)
};
formatQueryLyrics(findHasLyrics(lyricsData));
};
}
只需使用filter
方法:
lyricsData.result.filter(f=> f.haslyrics)
在你的情况下:
function findHasLyrics(lyricsData) {
return return lyricsData.result.filter(f=> f.haslyrics);
};
一个例子:
var data = { "success": true, "length": 50, "result": [{ "id_track": 123, "haslyrics": true, "id_artrist": 234, }, { "id_track": 567, "haslyrics": false, "id_artrist": 678, } ] }; function findHasLyrics(lyricsData) { return lyricsData.result.filter(f=> f.haslyrics) }; console.log(findHasLyrics(data));
只需使用Array.filter()
来过滤具有haslyrics
值为true
那些对象的数组。 您可以使用该函数避免自定义循环和逻辑。
var obj = { "success": true, "length": 50, "result": [ { "id_track": 123, "haslyrics": true, "id_artrist": 234, }, { "id_track": 567, "haslyrics": false, "id_artrist": 678, } ] }; var res = obj.result.filter(({haslyrics}) => haslyrics); console.log(res);
在您的代码中,您可以通过以下方式更新:
function findHasLyrics(lyricsData) { if (lyricsData.length === 0) { console.log("findHasLyrics", null); } else { var res = lyricsData.result.filter(({haslyrics}) => haslyrics); console.log(res); }; }; var obj = { "success": true, "length": 50, "result": [{ "id_track": 123, "haslyrics": true, "id_artrist": 234, }, { "id_track": 567, "haslyrics": false, "id_artrist": 678, } ] }; findHasLyrics(obj);
问题是您在for
签名中犯了一个容易出错的错误, 文档 here 。
您使用的第二个参数不返回整数(数字), lyricsData.result
是一个数组,您要返回其.length
,即:
for (let i=0; i<lyricsData.result.length; i++) {
...
}
但是,我建议您像其他人已经建议的那样使用.filter
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.