Javascript 从jQuery中的对象数组中提取单个属性的每个值

Javascript 从jQuery中的对象数组中提取单个属性的每个值,javascript,jquery,Javascript,Jquery,我需要在一组对象上创建一个新对象,这些对象最初看起来如下: startObj = [{'prop': true}, {'prop': false}]; 我希望结果是: endObj = {0: true, 1: false} 我想使用$。每个,但我不知道如何从这里开始。有什么提示吗 $.each([{'prop': true}, {'prop': false}], function (i, o) { var newObj; // the new object should l

我需要在一组对象上创建一个新对象,这些对象最初看起来如下:

startObj = [{'prop': true}, {'prop': false}];
我希望结果是:

endObj = {0: true, 1: false}
我想使用
$。每个
,但我不知道如何从这里开始。有什么提示吗

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

实例:

首先,这只是原生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;
}
var startObj=[{'prop':true},{'prop':false}],
endObj=[],//如果您愿意,也可以是{},但是如果您只是在startObj中有一个数组,那么它没有多大意义
i=0,
i_max=startObj.长度;
对于(i;i
这是一条单行线

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

如果OP真的想要一个对象(或者更确切地说,不想要数组)


.

此处不是真正创建对象,而是创建数组:

var newObj = [];//array
$.each([{'prop': true}, {'prop': false}], function (i, o)
{
    newObj[i] = o.prop
});
但是为了避免全球化,你可能想用一种生活方式:

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

您的问题要求结果是一个具有属性
0
1
等的对象,但是这看起来很像一个数组-大多数答案返回的是一个数组而不是对象。你到底想要回什么?这不是一个jQuery对象,它是一个简单的数组…@FelixKling-是的,但OP正在使用jQuery
。每个
对它进行迭代。为什么不呢?如果您使用jQuery,您可以自由地使用
每一个
来迭代它。@Jamiec:我不是说不能使用jQuery来实现这一点。OP最初写了“我有这个jQuery对象”,我只是想澄清它是一个普通的对象数组。它与jQuery完全无关,使用jQuery并不会使所有内容都成为“jQuery对象”或“jQuery数组”。仅此而已:)@FelixKling-Ah I C.没有看到(或者可能没有注意到)原始措辞。+1是最简单的解决方案,如果OP真的想要一个数组而不是一个假装是数组的对象。@Jamiec添加了另一个选项,如果OP真的想要一个对象。如果你有自动代码格式,这不是一行。我会说太脏了,不能发布;)是的,它很脏。但这是一个解决办法。所以它可以发生。:)UH请永远不要做这样的事。。。实际上,我倾向于否决这一点,因为它在我看来毫无用处。知识值得分享。我不知道另一个解决办法。现在我也从中获得了知识。谢谢,我没有得到这个解决方案-为什么你要通过字符串混合+解析这个字符串来实现这一点?第一个代码段如何具有第二个代码段避免的全局变量?对我来说似乎完全一样,为什么你要把它弄得这么复杂?在这种情况下,它不是真正的全局变量,但在这种情况下,你可以用更多的方法来处理IILife:将它包装在一个可调用的函数中,传递一个属性名/属性名,传递任意多的对象,。。。当然,这段代码还不能实现这些功能,但它不需要太多的努力就可以实现新功能(IMO)Ok。。。听起来第一个代码段有一个主要的缺点,您试图在第二个代码段中对其进行补偿。顺便说一句,我认为您不需要将
参数
转换为适当的数组,我认为jQuery可以正确处理类似数组的对象。@FelixKling:我还没有测试代码,我不完全确定,所以我选择了更安全的方法。。。也许有人会看到这一点,发现
参数
不是数组,所以我认为最好包含这一行。刚在控制台中测试过,参数处理得很好
var newObj = [];//array
$.each([{'prop': true}, {'prop': false}], function (i, o)
{
    newObj[i] = o.prop
});
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
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));
​