-1

私はこの質問に似た何かをしようとしています:

アクセスを非常に効率的にするために、キー ペア データの格納方法を変更できますか?

回答で提案されている関数を使用しようとしましたが、id が定義されていないというエラーが表示されます。

var userMap = userdata1.reduce(function(rv, v) {
  rv[v[id]] = v;
  return rv;
}, {});

ユーザーは、_lodash には .reduce に似たものがあると述べています。

変更するのと同じことを行うために _lodash を使用できますか:

var userdata1 = 
[
{"id":"527ddbd5-14d3-4fb9-a7ae-374e66f635d4","name":"xxx"},
{"id":"e87c05bc-8305-45d0-ba07-3dd24438ba8b","name":"yyy"}
]

次のような名前を見つけることができるオブジェクトに:

var theName = userdata1["527ddbd5-14d3-4fb9-a7ae-374e66f635d4"]
4

1 に答える 1

1

完全な解決策は次のとおりです。

var _ = require("lodash");

var userdata1 =
[
{"id":"527ddbd5-14d3-4fb9-a7ae-374e66f635d4","name":"xxx"},
{"id":"e87c05bc-8305-45d0-ba07-3dd24438ba8b","name":"yyy"}
];

var userMap = _.reduce(userdata1, function(rv, v) {
  rv[v.id] = v.name;
  return rv;
}, {});

console.log(userMap["527ddbd5-14d3-4fb9-a7ae-374e66f635d4"]);
console.log(userMap["e87c05bc-8305-45d0-ba07-3dd24438ba8b"]);

いくつかのメモ:

  1. リクエストに応じて lodash を含めましたが、userdata1.reduce.

  2. 渡した関数でreduceは、rv[v[id]]. これがあなたが得た理由ですundefined。コードは、名前が付けられたフィールドを探していませんでした。現在のスコープで名前が付けられているシンボルを解決しようとしていましたが"id"、この名前で定義されたものは見つかりませんでした。vid

  3. Anynymous 関数に対する他の唯一の変更は、オブジェクトにアクセスするときに質問で要求されたように名前v.nameを取得するのではなく、結果のオブジェクトに代入することです。vuserMap

  4. 使用パターンによっては、 への呼び出しObject.create(null)ではなく使用した方がよい場合があります。どちらが良いかは、文脈によって異なります。{}reduce

于 2014-01-25T12:09:43.703 に答える