2016-12-13 11 views
2

にJSONに変換しますどのようにJSONデータ/上に.get呼び出すことができませんなぜ私は</p>コード <p>、私は、パラメータとしてマップを取る関数のテストを書くことをしようとしているマップ

Map { "id": "jobs", "label": "Jobs", "nodeType": "ROOT", "childNodesURI": "jobs?owner=*", "childIds": List [], "isFetchingChildren": false, "isToggled": true, "jobName": "" }

var node = { 
       id: "jobs", 
       label: "JES Jobs", 
       nodeType: "ROOT", 
       childNodesURI: "jobs?owner=*", 
       childIds: [], 
       isFetchingChildren: false, 
       isToggled: true, 
       jobName: "" }; 
       console.log(node.get("id")); 

node.get( "idは")私が手と呼ばれる「TypeError例外:node.get(私はのtoStringを呼び出すとき)パラメータは形をとることができ、テストの外で正常に動作します関数ではありません "

私はこれがあると仮定しています。関数はありません.get()foo JSONオブジェクトですが、実際にはそうではありません...この場合、JSONをマップとして変換または初期化するにはどうすればよいですか?

+0

ようにそれを行うことができますか? https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Map P.S.あなたが正しいです、 'node'はMapではなく、標準のJSオブジェクトです。 – ADyson

+0

@ADysonには、マップエントリごとにmap.set(key、value)を実行するのではなく、JSONデータだけでマップを作成する方法がありますか? – JordyBobs

+0

私は分かりません。私が見てきたのは、私がリンクしているドキュメントです。私はこの質問を読む前に地図オブジェクトについて聞いたことがなかったので、Googleを使って基本情報を見つける方法を知っています:-)コンストラクタはそのページに従って '[iteratable]'を取ります。配列やその他の反復可能なオブジェクト "なので、それをあなたの' node'オブジェクトに与え、それが動作するかどうか確認してください。そうでない場合は、ページの「配列オブジェクトとの関係」の例のように、オブジェクトを配列として再作成してみてください。 – ADyson

答えて

2

私たちが表示しているものは、javascriptオブジェクトです。

var myMap = new Map(); 
 

 
// setting the values 
 
myMap.set("id", "jobs"); 
 

 
console.log(myMap.get("id"));
:あなたはこのような場合には、「キー」を呼び出す必要がある場合、あなたはそれには、この方法が必要にマップが必要な場合は、下記の

var node = { 
 
    id: "jobs", 
 
    label: "JES Jobs", 
 
    nodeType: "ROOT", 
 
    childNodesURI: "jobs?owner=*", 
 
    childIds: [], 
 
    isFetchingChildren: false, 
 
    isToggled: true, 
 
    jobName: "" 
 
}; 
 

 
//Call the object property ID 
 
console.log(node.id);

ようtheObject.thePropertyを使用する必要があります

オブジェクトから始まるマップを作成する場合は、地図のコンストラクタを使用して、この

var node = { 
 
    id: "jobs", 
 
    label: "JES Jobs", 
 
    nodeType: "ROOT", 
 
    childNodesURI: "jobs?owner=*", 
 
    childIds: [], 
 
    isFetchingChildren: false, 
 
    isToggled: true, 
 
    jobName: "" 
 
}; 
 

 
function buildMap(obj) { 
 
    let map = new Map(); 
 
    Object.keys(obj).forEach(key => { 
 
     map.set(key, obj[key]); 
 
    }); 
 
    return map; 
 
} 
 

 
const map = buildMap(node); 
 

 
console.log(map.get("id"));

+0

マップを作成してから、map.setを使用してプロダクションコードを変更する必要がなくなりました。ありがとう! – JordyBobs

1

node.idには、コードを使用してアクセスできます。プロトタイプを自分で拡張しない限り、オブジェクトリテラルにはget()メソッドはありません。

Mapは、ドキュメントに従って作成するときに、反復可能オブジェクトをパラメータとして受け入れる必要があります。実際には、配列の代わりにオブジェクトを使用すると、undefined is not a functionというエラーが発生することがわかりました。 また、ドキュメントを見ると、ブラウザサポートが完了していません(https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Map)。 (上記のリンクより引用)例えば

[1] Starting with Chrome 31, the feature was available behind a preference. In chrome://flags, activate the entry “Enable Experimental JavaScript”.

あなたのオプション私はそれらを見るようにしています。あなたはJSON

var m = new Map(); 
var json = {'foo': 'bar'}; 

for(var i in json) { 
    m.set(i, json[i]); 
} 
m.get('foo'); 

を反復それとも、本当にいない場合Mapメソッドはオブジェクトリテラルに固執する必要がありますすることができます。

json.foo; 
関連する問題

 関連する問題