JavaScript – 通过对象循环查找特定键值

我有一个名为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.js文件。 哪个工作。

然后我试图循环通过该文件,并find一个特定的值。

EG通过JSON对象循环,并且URL等于一个dynamic值(/ force)返回给我SpaceID。

所以这个JSON对象可能很大。 我尝试了两个解决scheme,但不认为我是他们呢。

我需要在contnetful.js文件中input一个URL,如果该URL匹配contnetful.json文件中的URL,我希望它返回该SpaceID。

从这个改变方法一:

  // 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在一个variables,那么只是在你的比较中使用一个variables。 你可以把整个东西包装在一个函数中,并把所需的string作为parameter passing给函数,然后你可以重用函数来匹配不同的值。

您可以使用filter来检查dynamicurl。 它将返回特定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); 
 //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); } });