2013-11-09 65 views

回答

11

你可能在尋找這樣的事情:

// original 
var arr = [ 
    {key : '11', value : '1100', $$hashKey : '00X' }, 
    {key : '22', value : '2200', $$hashKey : '018' } 
]; 

//convert 
var result = {}; 
for (var i=0; i<arr.length; i++) { 
    result[arr[i].key] = arr[i].value; 
} 

//result 
console.log(result); 
0

在這裏你去:

var arr = [{ key: "11", value: "1100" }, { key: "22", value: "2200" }]; 
var result = {}; 
for (var i=0, len=arr.length; i < len; i++) { 
    result[arr[i].key] = arr[i].value; 
} 
console.log(result); // {11: "1000", 22: "2200"} 
+0

這非常類似於有人發佈像5分鐘前的答案 – Alexander

+1

因爲這就是你如何解決這個問題。關於命名例如:'array'是一個保留關鍵字,所以人們使用'arr'來代替。等 – pstadler

0

以下是如何動態地接受以上的字符串,並將其插值到一個對象:

var stringObject = '[Object { key="11", value="1100", $$hashKey="00X"}, Object { key="22", value="2200", $$hashKey="018"}]'; 

function interpolateStringObject(stringObject) { 
    var jsObj = {}; 
    var processedObj = stringObject.split("[Object { "); 
    processedObj = processedObj[1].split("},"); 
    $.each(processedObj, function (i, v) { 
     jsObj[v.split("key=")[1].split(",")[0]] = v.split("value=")[1].split(",")[0].replace(/\"/g,''); 
    }); 

    return jsObj 
} 

var t = interpolateStringObject(stringObject); //t is the object you want 

http://jsfiddle.net/3QKmX/1/

21

我喜歡的功能性方法來實現這一任務:

var arr = [{ key:"11", value:"1100" }, { key:"22", value:"2200" }]; 
var result = arr.reduce(function(obj,item){ 
    obj[item.key] = item.value; 
    return obj; 
}, {}); 

注:最後{}是初始值爲obj的減值函數,如果您不會提供初始值的第一個arr元素將被使用(這可能是不受歡迎的)。

https://jsfiddle.net/GreQ/2xa078da/

+1

,如果密鑰是動態的? –

+0

那麼,你應該知道給定的項目/對象的哪個屬性應該用作關鍵字,哪個屬性值爲否?如果我們假設wfirst prop總是關鍵,第二個值我們可以使用像這樣的回調函數: function(obj,item){ \t \t var keys = item.keys(); obj [item [keys [0]]] = item [keys [0]]; return obj; } – GreQ

+0

糾錯回調以上的: 代碼 VAR OBJ = arr.reduce(函數(OBJ,項目){ \t \t VAR鍵= Object.keys(項目); \t \t OBJ [項目[鍵[0]] ] = item [keys [1]]; return obj; },{}); – GreQ

2

使用Underscore.js

var myArray = [ 
    Object { key="11", value="1100", $$hashKey="00X"}, 
    Object { key="22", value="2200", $$hashKey="018"} 
]; 
var myObj = _.object(_.pluck(myArray, 'key'), _.pluck(myArray, 'value')); 
9

微小ES6解決方案可以是這樣的:

var arr = [{key:"11", value:"1100"},{key:"22", value:"2200"}]; 
var object = arr.reduce(
    (obj, item) => Object.assign(obj, {[item.key]: item.value}) ,{}); 

另外,如果您使用對象蔓延,比它可以看起來像:

var object = arr.reduce((obj, item) => ({...obj, {[item.key]: item.value}}) ,{}); 

還有一個解決方案,99%的速度(在jsperf上測試):

var object = arr.reduce((obj, item) => (obj[item.key] = item.value, obj) ,{}); 

在這裏,我們從逗號運算符中受益,它在逗號之前評估所有表達式並返回最後一個(在最後一個逗號之後)。所以我們不要每次複製obj,而是給它分配新的屬性。

+1

最簡單的答案,但也是最優雅的 –

30
var newObj = Object.assign({}, ...array) 

完成!

+0

「魔法」轉換爲Object.assign({},{key:'11',value:'1100'},{key:'22',value: '2200'})'導致對象:'{key:'22',value:'2200'}',而不是預期的結果。 – Tibos

相關問題