我有一个名为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.json
文件中的contentful.js
文件。哪个有用。
然后我试图遍历该文件并找到一个特定的值。
E.G循环遍历JSON对象,其中URL等于动态值(/ force),返回SpaceID。
所以这个JSON对象可能 n 大。我尝试了两种解决方案,但不认为我是他们的。
我需要在contnetful.js
文件中输入一个URL,如果该URL与contnetful.json
文件中的URL匹配,我希望它返回该SpaceID。
答案 0 :(得分:3)
从中改变方法一:
// 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位于变量中,则只需在比较中使用变量即可。您可以将整个事物包装在函数中,并将所需的字符串作为函数的参数传递给函数,然后您可以重用该函数来匹配不同的值。
答案 1 :(得分:1)
您可以使用过滤器检查动态网址。它将返回特定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);
答案 2 :(得分:1)
//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);
}
});