Подтвердить что ты не робот

Underscore.js - Карта Массив пар ключ/значение для объекта - Один вкладыш

Я проходил через underscore docs, но я не могу найти способ (или вложенный вызов метода), чтобы выполнить следующее преобразование:

Скажем, у меня есть следующий массив Javascript:

 [{ "name" : "sEcho", "value" : 1},{ "name" : "iColumns", "value" : 12}, ... ]

И мне нужно преобразовать его в следующий объект:

 {
      sEcho: 1,
      iColumns: 12,
      ...
 }

Я использую underscore.js по какой-то причине, поэтому он должен быть одним лайнером.

4b9b3361

Ответ 1

Поскольку никто не отправил это как ответ, я публикую его, потому что я думаю, что это лучше, чем ответ Jan. Он короче и чище без встроенной функции.

_.object(_.pluck(data, 'name'), _.pluck(data, 'value'));

Ответ 2

Изменение Sza answer, используя подпись "массив пар" _.object:

_.object(_.map(data, function(x){return [x.name, x.value]}))

Ответ 3

Это должно сделать это:

_.reduce(array, function(o, v){
    o[v.name] = v.value;
    return o;
}, {});

Как однострочный (вы издеваетесь надо мной, правда?):

_.reduce(array,function(a,b){a[b.name]=b.value;return a},{});

Ответ 4

Скажем, у вас есть следующий массив JavaScript:

var list = [
    {
         name: "sEcho",
         value: 1
    },
    {
         name: "iColumns",
         value: 12
    },
    ...
];

Вы можете преобразовать его в желаемый формат следующим образом:

var table = _.reduce(list, function (table, item) {
    table[item.name] = item.value;
    return table;
}, {});

Это не один лайнер, но я не думаю, что вы буквально имели в виду один лайнер. Вы?

Вот один вкладыш, если вы действительно имели в виду один лайнер:

var t = _.reduce(list, function (t, i) { return t[i.name] = i.value, t; }, {});

Да, другие дали тот же ответ. Однако это только потому, что ответ на ваш вопрос настолько прост.

Ответ 5

var names = _.pluck(data, 'name');
var values = _.pluck(data, 'value');
var result = _.object(_.zip(names, values));
console.log(result);

Ответ 6

var a =  [{ "name" : "sEcho", "value" : 1},{ "name" : "iColumns", "value" : 12} ];

var o = {}; _.each(a, function(e) { o[e.name] = e.value; });

console.log(o);
// Object {sEcho: 1, iColumns: 12} 

Ответ 7

Идеальное место для использования уменьшает я думаю:

_.reduce(ary, function(memo, obj){ memo[obj["name"]] = obj["value"]; return memo }, {});

Ответ 8

var arr = [{ "name" : "sEcho", "value" : 1},{ "name" : "iColumns", "value" : 12}]

ES6

_.mapObject( _.indexBy(arr, 'name'), (v) => v.value )

ES5

_.mapObject( _.indexBy(arr, 'name'), function (v) { return v.value; } )

Это повторяется дважды, хотя