159

私はオブジェクトの配列を持っています:

[ 
  { key : '11', value : '1100', $$hashKey : '00X' },
  { key : '22', value : '2200', $$hashKey : '018' }
];

JavaScriptで次のように変換するにはどうすればよいですか?

{
  "11": "1100",
  "22": "2200"
}
4

15 に答える 15

73

あなたはおそらく次のようなものを探しています:

// original
var arr = [ 
  {key : '11', value : '1100', $$hashKey : '00X' },
  {key : '22', value : '2200', $$hashKey : '018' }
];

//convert
var result = {};
for (var i = 0; i < arr.length; i++) {
  result[arr[i].key] = arr[i].value;
}

console.log(result);

于 2013-11-09T09:55:49.343 に答える
10

ロダッシュを使おう!

const obj = _.keyBy(arrayOfObjects, 'keyName')
于 2016-06-05T13:16:20.073 に答える
9

多くの著者から提案された回答に基づいて、JsPref テスト シナリオを作成しました。https://jsperf.com/array2object82364

以下は、パフォーマンスのスクリーンショットです。見るのは少し衝撃的です.chromeの結果は、何度か実行した後でも、FirefoxやEdgeとは対照的です.

角

ファイアフォックス

クロム

于 2020-02-25T19:10:13.627 に答える
5

更新: 世界は回り続けました。代わりに機能的なアプローチを使用してください。

どうぞ:

var arr = [{ key: "11", value: "1100" }, { key: "22", value: "2200" }];
var result = {};
for (var i=0, len=arr.length; i < len; i++) {
    result[arr[i].key] = arr[i].value;
}
console.log(result); // {11: "1000", 22: "2200"}
于 2013-11-09T10:00:06.767 に答える
2

Underscore.js の使用:

var myArray = [
  Object { key="11", value="1100", $$hashKey="00X"},
  Object { key="22", value="2200", $$hashKey="018"}
];
var myObj = _.object(_.pluck(myArray, 'key'), _.pluck(myArray, 'value'));
于 2016-05-24T03:52:31.583 に答える
0

上記を文字列として動的に受け入れ、それをオブジェクトに補間する方法は次のとおりです。

var stringObject = '[Object { key="11", value="1100", $$hashKey="00X"}, Object { key="22", value="2200", $$hashKey="018"}]';

function interpolateStringObject(stringObject) {
  var jsObj = {};
  var processedObj = stringObject.split("[Object { ");
  processedObj = processedObj[1].split("},");
  $.each(processedObj, function (i, v) {
      jsObj[v.split("key=")[1].split(",")[0]] = v.split("value=")[1].split(",")[0].replace(/\"/g,'');
  });

  return jsObj
}

var t = interpolateStringObject(stringObject); //t is the object you want

http://jsfiddle.net/3QKmX/1/

于 2013-11-09T10:14:17.783 に答える