Как создать словарь и динамически добавлять пары ключ-значение? - PullRequest
260 голосов
/ 25 августа 2011

От должности:

Отправка массива JSON для получения в качестве словаря <строка, строка>

Я пытаюсь сделать то же самое, что и этот пост. Единственная проблема заключается в том, что я не знаю, какие ключи и значения стоят заранее. Поэтому мне нужно иметь возможность динамически добавлять пары ключ и значение, и я не знаю, как это сделать.

Кто-нибудь знает, как создать этот объект и динамически добавлять пары ключ-значение?

Я пробовал:

var vars = [{key:"key", value:"value"}];
vars[0].key = "newkey";
vars[0].value = "newvalue";

Но это не работает.

Ответы [ 14 ]

2 голосов
/ 17 февраля 2018

как насчет одного вкладыша для создания пары ключ-значение?

let result = { ["foo"]: "some value" };

и некоторые итераторы, например reduce, для динамического преобразования массива в словарь

var options = [
  { key: "foo", value: 1 },
  { key: "bar", value: {id: 2, name: "two"} },
  { key: "baz", value: {["active"]: true} },
];

var result = options.reduce((accumulator, current) => {
  accumulator[current.key] = current.value;
  return accumulator;
}, {});

console.log(result);
2 голосов
/ 25 июля 2012

Я столкнулся с этой проблемой ... но в цикле for. Верхнее решение не работало (при использовании переменных (а не строк) для параметров функции push), а другие не учитывали значения ключей, основанные на переменных. Я был удивлен, что этот подход (который распространен в php) сработал ..

  // example dict/json                  
  var iterateDict = {'record_identifier': {'content':'Some content','title':'Title of my Record'},
    'record_identifier_2': {'content':'Some  different content','title':'Title of my another Record'} };

  var array = [];

  // key to reduce the 'record' to
  var reduceKey = 'title';

  for(key in iterateDict)
   // ultra-safe variable checking...
   if(iterateDict[key] !== undefined && iterateDict[key][reduceKey] !== undefined)
    // build element to new array key
     array[key]=iterateDict[key][reduceKey];
2 голосов
/ 25 августа 2011

Тонна поможет узнать, каков ваш конечный желаемый результат, но я думаю, что это то, что вы хотите:

var vars = [{key:"key", value:"value"}];

vars.push({key: "newkey", value: "newvalue"})
1 голос
/ 20 июля 2016

Улучшение var dict = {} заключается в использовании var dict = Object.create(null).

Это создаст пустой объект, который не имеет Object.prototype в качестве прототипа.

var dict1 = {};
if (dict1["toString"]){
    console.log("Hey, I didn't put that there!")
}
var dict2 = Object.create(null);
if (dict2["toString"]){
    console.log("This line won't run :)")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...