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); } });