Как создать свойства объекта JavaScript с динамическим именем? - PullRequest
5 голосов
/ 10 ноября 2011

Вот что у меня есть

<form>
  <input type="text" name="item1" class="grab" value="userInput" />
  <input type="text" name="somethingelse1" class="grab" value="differentUserInput" />
  ... (any number of inputs)
</form>

Используя JQuery / Javascript, я хочу создать массив объектов с парами имя-значение, который выглядит следующим образом:

output = [ {item1: userInput}, {somethingelse1: differentUserInput} ... etc.];

Я пыталсяэто безуспешно:

var output = new Array();
$('.grab').each( function(index) { 
    output.push({$(this).attr('name'): $(this).val()} );
});

Я пробовал несколько вариантов, включая эксперименты с eval (), но безрезультатно.Если я удаляю $ (this) .attr ('name') и даю ему статическое имя, оно работает ... так как я могу создавать объекты с динамическими именами?

Ответы [ 2 ]

17 голосов
/ 10 ноября 2011

Синтаксис литерального объекта нельзя использовать для не литеральных ключей.Для использования нелитерального ключа с объектом требуется обозначение object[keyExpression], как показано ниже.(Это эквивалентно object.key, когда keyExpression = "key", но обратите внимание, что первый случай принимает выражение в качестве ключа, а второй - идентификатор.)

var output = []
$('.grab').each(function(index) { 
    var obj = {}
    obj[$(this).attr('name')] = $(this).val()
    output.push(obj)
})

Счастливое кодирование.


Также рассмотрите возможность использования .map():

var output = $('.grab').map(function() { 
    var obj = {}
    obj[$(this).attr('name')] = $(this).val()
    return obj
})
0 голосов
/ 17 января 2017

Я взял только идентификатор формы в качестве параметра этой функции:

function form2JSON(form){
    var info_ser = $('#'+form).serialize();
    var data = info_ser.split('&');
    var output = {};
    $.each( data, function( i, l ){
        var data_input = l.split('=');
        output[data_input[0]] = data_input[1];
    });
   return output;
}

Объект результата выглядит примерно так Object { fieldname="value", fieldname1="value1", fieldname2="value3", ...}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...