Извлечь каждое значение одного свойства из массива объектов в jQuery

Мне нужно создать новый объект, итерации по массиву объектов, который изначально выглядит следующим образом:

startObj = [{'prop': true}, {'prop': false}];

Я хотел бы получить результат:

endObj = {0: true, 1: false}

Я думал использовать $.each, но тогда я не знаю, как исходить отсюда. Любые подсказки?

$.each([{'prop': true}, {'prop': false}], function (i, o) {
    var newObj;
    // the new object should look like this
    // newObj = {0: true, 1: false}
});

Ответ 1

var newObj = {};
$.each([{'prop': true}, {'prop': false}], function (i, o) {
    newObj[i] = o.prop;
});

Пример в реальном времени: http://jsfiddle.net/8X48q/

Ответ 2

Здесь однострочный.

var newObj = $.map(oldObj, function(val) { return val.prop; });

jsFiddle.

Если OP действительно хочет объект (или, скорее, не хочет массив)...

var newObj = $.extend({}, $.map(oldObj, function(val) { return val.prop; }));

jsFiddle.

Ответ 3

Во-первых, это только родной JS, здесь нет jQuery.

var startObj = [{'prop': true}, {'prop': false}],
    endObj = [], // This could also be {} if you want but if you just have an array in startObj, it doesn't make much sense
     i = 0,
     i_max = startObj.length;

for (i; i < i_max; i++) {
    endObj.push( startObj[i].prop );
    // if you changed endObj to be {} then use the following line instead of the one above
    // endObj[i] = startObj[i].prop;
}

Ответ 4

Вы не создаете объект здесь, а массив:

var newObj = [];//array
$.each([{'prop': true}, {'prop': false}], function (i, o)
{
    newObj[i] = o.prop
});

Но чтобы избежать глобалов, вы можете использовать IIFE:

var newObj = (function()
{//takes any amount of objects as argument
    var returnArray = [];
    var argumentsToArray = Array.prototype.slice.apply(arguments,[0]);//create array of objects passed
    $.each(argumentsToArray, function (i, o)
    {
        returnArray[i] = o.prop
    });
    return returnArray;//is assigned to newObj
})({'prop': true}, {'prop': false});//1 obj, 2, 3, 4, 5... doesn't matter

Ответ 5

var obj = "{";
$.each([{'prop': true}, {'prop': false}], function (index, o) {
    obj += '"' + index  + '":'  + o.prop + ",";
});
var newObj = obj.substring(0, obj.length - 1);
newObj += "}";
console.log(newObj);
console.log($.parseJSON(newObj));
​