2013-06-24 209 views
1

我有这样的阵列,var arr = [0, 1, 2]如何将数组转换为对象?

,我想将其转换成一个像这样的对象,

Object{ 
    data: [0, 1, 2] 
} 

如何,我会得到使用功能也许期望的输出?谢谢。

+1

'var obj = {data:arr};' –

+0

为什么您认为您需要这样做 – aaronman

+1

JavaScript教程介绍了这些内容。请阅读:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects和http://eloquentjavascript.net/chapter4.html。 –

回答

8

只需创建一个对象和数组分配到一个它它的属性:

var arr = [0, 1, 2]; 
var obj = { 
    data : arr 
}; 

或者,如果你有一个现有的对象,就可以按名称添加的数组:

obj['data'] = arr; 

或点符号:

obj.data = arr; 

你应该知道,这些都是通过引用复制数组,所以任何更新你对arr变量的更新也会更新为obj.data。如果你想通过值复制,你可以这样做:

var obj = { 
    data: arr.slice(0) 
}; 

由参考值与复制见this JSFiddle用于复制的一个例子。您可以阅读this question的答案以获取有关按值复制和按引用复制的更多信息。

+1

就是这样,谢谢你! –

+1

您的'copyByValue'函数基本上可以用'arr.slice(0)'代替。它也会创建一个数组的浅表副本。 –

+0

@FelixKling尼斯:)我不知道 – cfs

0

你可以很容易地做到这一点var obj = {data:arr};但我认为你应该考虑你使用该对象的目的是什么。一个数组在技术上已经是一个JavaScript对象,所以你可能甚至不需要这样做

0

这很容易,你只需要一个工厂。

function arrayToObjectTransformationFactory($array, $transformationTransportProtocol){ 
     return function($array){ 
     if (!Array.prototype.forEach) { 
      Array.prototype.forEach = function(fn, scope) { 
      for(var i = 0, len = this.length; i < len; ++i) { 
       fn.call(scope, this[i], i, this); 
      } 
      }; 
     } 
     $array.forEach($transformationTransportProtocol) 
     return { "data": $array }; 
     }($array); 
    } 

    arrayToObjectTransformationFactory([0, 1, 2], function($element, $index, $array){ 
     var quux = []; 
     quux.push($array[$index]); 
    }); 

应该跨越浏览器和jQuery。

+2

我不太明白这一点。该功能有什么用处?你根本不改变阵列?同样,与简单的for循环相比,它们都非常复杂,因为您将修改数组。我不明白 –

相关问题