Ответ 1
В новом стандарте ES2015 для JavaScript (ранее называвшемся ES6) объекты могут быть созданы с помощью вычисленных ключей: Инициализатор объектов спецификации.
Синтаксис:
var obj = {
[myKey]: value,
}
Если применить к сценарию OP, он превратится в:
stuff = function (thing, callback) {
var inputs = $('div.quantity > input').map(function(){
return {
[this.attr('name')]: this.attr('value'),
};
})
callback(null, inputs);
}
Примечание. Для совместимости браузеров по-прежнему требуется транспилер.
Используя Babel или Google traceur, можно используйте этот синтаксис сегодня.
В более ранних спецификациях JavaScript (ES5 и ниже) ключ в литерале объекта всегда интерпретируется буквально как строка.
Чтобы использовать "динамический" ключ, вы должны использовать нотацию скобок:
var obj = {};
obj[myKey] = value;
В вашем случае:
stuff = function (thing, callback) {
var inputs = $('div.quantity > input').map(function(){
var key = this.attr('name')
, value = this.attr('value')
, ret = {};
ret[key] = value;
return ret;
})
callback(null, inputs);
}