JavaScript - 循环对象以查找特定键值

时间:2017-01-11 09:31:20

标签: javascript arrays json node.js loops

我有一个名为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。

3 个答案:

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