JavaScript - 遍历对象以查找特定的键值
Posted
技术标签:
【中文标题】JavaScript - 遍历对象以查找特定的键值【英文标题】:JavaScript - Loop through Object to find Specific Key Value 【发布时间】:2017-05-26 00:31:19 【问题描述】:我有一个名为 contentful.json
的文件,它存储在我的目录的根目录中。
这是该文件的样子:
[
"URL": "/force",
"SpaceID": "2g1335I9GYQCKwmQYCuSSI"
,
"URL": "/heroku",
"SpaceID": "2g1335I9GYQCKwmQYCuSSI"
,
"URL": "/slack",
"SpaceID": "2g1335I9GYQCKwmQYCuSSI"
,
"URL": "/contentful",
"SpaceID": "2g1335I9GYQCKwmQYCuSSI"
,
"URL": "/openShift",
"SpaceID": "2g1335I9GYQCKwmQYCuSSI"
]
然后我有一个名为 contentful.js
的文件。
看起来像这样:
const fs = require('fs');
let obj;
fs.readFile('./contentful.json', 'utf8', (err, jsonData) =>
if (err) throw err;
obj = JSON.parse(jsonData);
// Method One
for (let i = 0, l = obj.length; i < l; i++)
console.log(obj.URL);
// ...
// Method Two
Object.keys(obj).forEach((key) =>
if (key.url === '/heroku')
console.log(key.SpaceID);
);
);
我想做的是从contentful.js
文件中读取contentful.json
文件。哪个有效。
然后我试图遍历该文件并找到一个特定的值。
E.G 循环遍历 JSON 对象,如果 URL 等于动态值 (/force),则返回 SpaceID。
所以这个 JSON 对象可能 n 大。我尝试了两种解决方案,但认为我还不是他们的。
我需要在contnetful.js
文件中输入一个 URL,如果该 URL 与 contnetful.json
文件中的 URL 匹配,我希望它返回该 SpaceID。
【问题讨论】:
console.log(obj.URL)
的输出是undefined
。它打印出undefined
的次数与 JSON 对象的大小一样多。在这种情况下 5. 但是对于方法二 console.log(key.SpaceID);
它不会打印任何内容。
【参考方案1】:
从此改变方法一:
// Method One
for (let i = 0, l = obj.length; i < l; i++)
console.log(obj.URL);
// ...
到这里:
// Method One
for (let i = 0, l = obj.length; i < l; i++)
console.log(obj[i].URL);
if (obj[i].URL === someVariable)
console.log("found match for ", someVariable);
console.log("SpaceID = ", obj[i].SpaceID);
// ...
您必须使用for
循环中的索引来索引obj
数组,以获取数组中该位置的对象。
如果您希望您要查找的 URL 在变量中,那么只需在比较中使用变量即可。您可以将整个内容包装在一个函数中,并将所需的字符串作为函数的参数传递给函数,然后您可以重用该函数来匹配不同的值。
【讨论】:
仍然没有动态网址。 @DominikNoll - 如果需要,可以将"/force"
更改为变量。
这就是他问题的答案:-)【参考方案2】:
您可以使用过滤器来检查动态 URL。它将返回特定 URL 的过滤匹配。您可以从过滤结果中获取spaceID。
let obj;
let dynamicURL = "/heroku"
obj = [
"URL": "/force",
"SpaceID": "2g1335I9GYQCKwmQYCuSSI"
,
"URL": "/heroku",
"SpaceID": "2g1335I9GYQCKwmQYCuSSI"
,
"URL": "/slack",
"SpaceID": "2g1335I9GYQCKwmQYCuSSI"
,
"URL": "/contentful",
"SpaceID": "2g1335I9GYQCKwmQYCuSSI"
,
"URL": "/openShift",
"SpaceID": "2g1335I9GYQCKwmQYCuSSI"
]
var filtered = obj.filter(function(elem)
return (elem.URL == dynamicURL)
);
console.log(filtered[0].SpaceID);
【讨论】:
【参考方案3】://Method One:
function searchForUrl(obj, url)
for(let i = 0, l = obj.length; i < l; i++)
if(obj[i].Url == url)
//DO STUFF
break; //better performance, only if the URL is unique!!
//Method Two:
function searchForUrl(obj, url)
Object.keys(obj).forEach((key) =>
if (key.url === url)
console.log(key.SpaceID);
);
【讨论】:
以上是关于JavaScript - 遍历对象以查找特定的键值的主要内容,如果未能解决你的问题,请参考以下文章
在对象的 json 数组中找到一个键值并返回另一个带有角度的键值