javascript - 如何获取 JSON 数组中的第一个密钥对?
问题描述
目前,我有我的 JSON 和一个循环遍历结果然后遍历 URL 的函数。我试图只获取第一个类型值,即详细信息。我尝试寻找获得第一个值的方法,发现 using[0]
在某些情况下可以工作,但不是这种情况。我索引不正确吗?有没有更简洁的方法来编码这个嵌套的 for 循环?
const data = {
"data": {
"results": [{
"name": "Deadpool",
"urls": [{
"type": "detail",
"url": "http://marvel.com/characters/12/deadpool?utm_campaign=apiRef&utm_source=6fa9bcf637a9185ee2e3035cb2d3b465"
},
{
"type": "wiki",
"url": "http://marvel.com/universe/Deadpool_(Wade_Wilson)?utm_campaign=apiRef&utm_source=6fa9bcf637a9185ee2e3035cb2d3b465"
},
{
"type": "comiclink",
"url": "http://marvel.com/comics/characters/1009268/deadpool?utm_campaign=apiRef&utm_source=6fa9bcf637a9185ee2e3035cb2d3b465"
}
]
}]
}
};
function test(data) {
const dataArr = data.data['results'];
for (let i = 0; i < dataArr.length; i++) {
console.log(dataArr[i].urls);
const urlArr = dataArr[i].urls
for (let j = 0; j < urlArr.length; j++) {
console.log(urlArr[j].type[0]);
}
}
}
test(data);
解决方案
一种功能性的方法...
您的问题似乎有点含糊,但我认为您正在寻找每个数组type
中第一项的值。urls
const data = {
"data": {
"results": [{
"name": "Deadpool",
"urls": [{
"type": "detail",
"url": "http://marvel.com/characters/12/deadpool?utm_campaign=apiRef&utm_source=6fa9bcf637a9185ee2e3035cb2d3b465"
},
{
"type": "wiki",
"url": "http://marvel.com/universe/Deadpool_(Wade_Wilson)?utm_campaign=apiRef&utm_source=6fa9bcf637a9185ee2e3035cb2d3b465"
},
{
"type": "comiclink",
"url": "http://marvel.com/comics/characters/1009268/deadpool?utm_campaign=apiRef&utm_source=6fa9bcf637a9185ee2e3035cb2d3b465"
}]
}]
}
};
const types = data.data.results.map(({ urls: [first, ...rest] }) => first.type);
console.log(types);
让我们分解一下...
data.data.results.map(...)
Array.prototype.map
将返回一个新数组,其中包含对数组中每个元素调用提供的函数的结果results
。
({ urls: ... })
这称为解构。它定义了一个新变量 ,当我们遍历项目时urls
,它被分配了属性的值。urls
results
({ urls: [first, ...rest] })
我们定义的变量的值urls
将是一个数组。我们只关心数组中的第一项,因此我们将展开数组,定义一个名为的新变量,该变量first
分配第一项的值,以及一个变量 ,rest
它将是其余项的数组。基本上,占据阵列的头部。这些操作分别称为spread和rest。
({ urls: [first, ...rest] }) => first.type
最后,type
从第一urls
项返回属性的值。
如果我完全错了
并且您想要每个urls
数组中的“详细信息”项,然后稍作更改就足够了:
const data = {
"data": {
"results": [{
"name": "Deadpool",
"urls": [{
"type": "detail",
"url": "http://marvel.com/characters/12/deadpool?utm_campaign=apiRef&utm_source=6fa9bcf637a9185ee2e3035cb2d3b465"
},
{
"type": "wiki",
"url": "http://marvel.com/universe/Deadpool_(Wade_Wilson)?utm_campaign=apiRef&utm_source=6fa9bcf637a9185ee2e3035cb2d3b465"
},
{
"type": "comiclink",
"url": "http://marvel.com/comics/characters/1009268/deadpool?utm_campaign=apiRef&utm_source=6fa9bcf637a9185ee2e3035cb2d3b465"
}]
}]
}
};
const urls = data.data.results.map(({ urls }) =>
urls.find(({ type }) => type === 'detail')
);
console.log(urls);
如果您想了解更多关于函数式编程的知识,Eric Elliott 写了一组关于 JavaScript 函数式编程的优秀文章。这是第一个。
推荐阅读
- c - 如何在 MICROCHIP XC8 的库中正确使用 __delay_ms()?
- c++ - 如何使用 Lua 从表中的表中获取值?
- javascript - Adyen 自定义卡片标签导航在最新版本中无法正常工作
- javascript - Next-Pwa 无法在 Nginx 等生产服务器上运行
- cakephp - 在 CakePHP 中创建搜索表单
- apache-nifi - NiFi 问题:记录包含双引号时的 UpdateRecord 问题
- python-3.x - 尝试在 macOS 上添加 Pygame 时如何修复错误代码“command '/usr/bin/gcc' failed with exit code 1”
- css - cdk 以角度将图像从一个 div 拖放到另一个
- python-3.x - 删除带有数字的子字符串和字符串之间的破折号
- flutter - 在 Google 地图上显示多个标记