10

最初は次のように見えるオブジェクトの配列を反復処理する新しいオブジェクトを作成する必要があります。

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}
});
4

5 に答える 5

12

これがワンライナーです。

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

jsFiddle

OPが本当にオブジェクトを必要としている場合(つまり、配列を必要としない場合)...

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

jsFiddle

于 2012-10-12T09:53:23.147 に答える
7
var newObj = {};
$.each([{'prop': true}, {'prop': false}], function (i, o) {
    newObj[i] = o.prop;
});

実際の例: http://jsfiddle.net/8X48q/

于 2012-10-12T09:50:29.943 に答える
1

まず、これは単なるネイティブ 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;
}
于 2012-10-12T09:52:03.303 に答える
0

ここでは実際にはオブジェクトを作成していませんが、配列を作成しています。

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
于 2012-10-12T09:53:50.953 に答える