2017-01-11 10 views
1

contentful.jsonというファイルがmyディレクトリのルートに格納されています。JavaScript - 特定のキー値を見つけるためのオブジェクトをループ

これは、そのファイルがどのように見えるかです:私は、そのファイルがcontentful.jsと呼ばれている

[{ "URL": "/force", "SpaceID": "2g1335I9GYQCKwmQYCuSSI" }, { "URL": "/heroku", "SpaceID": "2g1335I9GYQCKwmQYCuSSI" }, { "URL": "/slack", "SpaceID": "2g1335I9GYQCKwmQYCuSSI" }, { "URL": "/contentful", "SpaceID": "2g1335I9GYQCKwmQYCuSSI" }, { "URL": "/openShift", "SpaceID": "2g1335I9GYQCKwmQYCuSSI" }]

。このようになります

:私が何をしようとしています何

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と大きくなる可能性があります。私は2つの解決策を試みましたが、私はまだかなりのものだとは思わない。

contnetful.jsファイルにURLを入力する必要があり、そのURLがcontnetful.jsonファイルのURLと一致する場合は、そのSpaceIDを返信したいと思います。

+0

'console.log(obj.URL)'の出力は 'undefined'です。これは、JSONオブジェクトのサイズと同じくらい多くの時間、 'undefined'を出力します。この場合は5.しかし、方法2の 'console.log(key.SpaceID);'は何も出力しません。 – user3180997

答えて

3

の変更方法このから1:あなたはへのインデックスにあなたのforループ内でのインデックスを使用する必要が

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

:これまで

// Method One 
    for (let i = 0, l = obj.length; i < l; i++) { 
    console.log(obj.URL); 
    // ... 
    } 

objオブジェクトを取得する配列配列内のその場所で。

あなたが探しているURLを変数にしたい場合は、比較で変数を使用してください。関数内のすべてをラップし、目的の文字列を関数の引数として関数に渡し、関数を再利用して異なる値に一致させることができます。

+0

はまだ動的URLがありません。 – DomeTune

+0

@DominikNoll - 必要に応じて ''/force ''を変数に変更します。 – jfriend00

+0

彼の質問への答えはそれです:-) – DomeTune

1

フィルタを使用して動的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);

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); 
    } 
}); 
関連する問題