it-swarm.dev

Underscore.js - خريطة صفيف أزواج المفاتيح / القيمة إلى كائن - بطانة واحدة

لقد مررت مستندات تسطير أسفل السطر لكن لا يمكنني العثور على طريقة (أو استدعاء طريقة متداخلة) للقيام بالتحويل التالي:

دعنا نقول أن لدي مجموعة جافا سكريبت التالية:

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

ولست بحاجة لتحويله إلى الكائن التالي:

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

أنا أستخدم underscore.js لسبب لذلك يجب أن يكون بطانة واحدة.

46
parliament

نظرًا لأن لا أحد نشر هذا كإجابة ، فأنا نشره لأنني أعتقد أنه أفضل من إجابة جان . إنها أقصر وأنظف بدون وظيفة مضمنة.

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

التباين في إجابة Sza ، باستخدام توقيع "مجموعة من الأزواج" من _.object:

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

هذا ينبغي أن تفعل ذلك:

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

بصفتك واحداً (أنت تمزح معي ، أليس كذلك؟):

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

لنفترض أن لديك صفيف 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; }, {});

نعم ، قدم آخرون نفس الإجابة. لكن هذا فقط لأن إجابة سؤالك بسيطة للغاية.

6
Aadit M Shah
var names = _.pluck(data, 'name');
var values = _.pluck(data, 'value');
var result = _.object(_.Zip(names, values));
console.log(result);
6
zs2020
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} 
3
Amadan

المكان المثالي لاستخدام تقليل أعتقد:

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

2
user2240431
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; } )

هذا يتكرر مرتين على الرغم من

0
bentael