Как использовать переменную для ключа в литерале объекта JavaScript? - PullRequest
323 голосов
/ 16 февраля 2010

Почему работает следующее?

<something>.stop().animate(
    { 'top' : 10 }, 10
);

Принимая во внимание, что это не работает:

var thetop = 'top';
<something>.stop().animate(
    { thetop : 10 }, 10
);

Чтобы сделать это еще яснее: В данный момент я не могу пройтисвойство CSS для функции animate как переменной.

Ответы [ 12 ]

0 голосов
/ 02 октября 2018
Ниже приведена реализация 1000 * ES5 для назначения ключей:
var obj = Object.create(null),
    objArgs = (
      (objArgs = {}),
      (objArgs.someKey = {
        value: 'someValue'
      }), objArgs);

Object.defineProperties(obj, objArgs);

Я прикрепил фрагмент, который использовал для преобразования в голый объект.

var obj = {
  'key1': 'value1',
  'key2': 'value2',
  'key3': [
    'value3',
    'value4',
  ],
  'key4': {
    'key5': 'value5'
  }
}

var bareObj = function(obj) {

  var objArgs,
    bareObj = Object.create(null);

  Object.entries(obj).forEach(function([key, value]) {

    var objArgs = (
      (objArgs = {}),
      (objArgs[key] = {
        value: value
      }), objArgs);

    Object.defineProperties(bareObj, objArgs);

  });

  return {
    input: obj,
    output: bareObj
  };

}(obj);

if (!Object.entries) {
  Object.entries = function(obj){
    var arr = [];
    Object.keys(obj).forEach(function(key){
      arr.push([key, obj[key]]);
    });
    return arr;
  }
}

console(bareObj);
0 голосов
/ 28 марта 2018

Таким образом, вы также можете достичь желаемого результата

var jsonobj={};
var count=0;
$(document).on('click','#btnadd', function() {
    jsonobj[count]=new Array({ "1"  : $("#txtone").val()},{ "2"  : $("#txttwo").val()});
    count++;
    console.clear();
    console.log(jsonobj);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span>value 1</span><input id="txtone" type="text"/>
<span>value 2</span><input id="txttwo" type="text"/>
<button id="btnadd">Add</button>
...