2017-03-05 49 views
-1

我有一個數組:轉換陣列與自定義密鑰對象

let Given = [ 
    ["SRM_SaaS_ES,MXASSETInterface,AddChange,EN"], 
    ["ASSETNUM,AS_SITEID,apple,ball"], 
    ["mesa01,SDASITE,ball,cat"], 
    ["ASSETNUM,AS_SITEID,cat,ager"] 
]; 

我要的是得到的第一個數組作爲鍵,其餘爲各自的值如下:

let needed = [{ 
    'SRM_SaaS_ES': 'ASSETNUM', 
    'MXASSETInterface': 'AS_SITEID', 
    'AddChange': 'apple', 
    'EN': 'ball', 
    }, 
    { 
    'SRM_SaaS_ES': 'mesa01', 
    'MXASSETInterface': 'SDASITE', 
    'AddChange': 'ball', 
    'EN': 'cat', 
    }, 
    { 
    'SRM_SaaS_ES': 'ASSETNUM', 
    'MXASSETInterface': 'AS_SITEID', 
    'AddChange': 'cat', 
    'EN': 'ager', 
    } 
] 

什麼我試圖做的是獲得第一個數組,然後將值分配給第一個數組作爲鍵,但我不能。

let firstArrayData: string = this.Given[0]; 
let data = firstArrayData[0].split(','); 
console.log(JSON.stringify(data));//["SRM_SaaS_ES","MXASSETInterface","AddChange","EN"] 

回答

2

下面是做這件事:

let Given = [ 
 
    ["SRM_SaaS_ES,MXASSETInterface,AddChange,EN"], 
 
    ["ASSETNUM,AS_SITEID,apple,ball"], 
 
    ["mesa01,SDASITE,ball,cat"], 
 
    ["ASSETNUM,AS_SITEID,cat,ager"] 
 
]; 
 

 
// first get the keys out of the first sub array: 
 
const keys = Given[0][0].split(","); 
 

 
// then map over the rest of the sub arrays: 
 
const result = Given.slice(1).map(function(item) { 
 
    // get values from current item 
 
    const values = item[0].split(","); 
 
    // create an object with key names and item values: 
 
    const obj = {}; 
 
    keys.forEach(function(k,i) { 
 
    obj[k] = values[i]; 
 
    }); 
 
    return obj; 
 
}); 
 

 
console.log(result);

+0

1分鐘打我。 :-) – Rajesh

+0

謝謝。我很喜歡JavaScript內置函數。感謝您的詳細解釋。 –

+1

不客氣。請注意,這可以通過幾種方式完成;我剛剛發佈了第一個想到的方法。我沒有在我的答案中加入任何doco的鏈接,但是關於數組有一個[MDN頁面](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)帶有解釋所有內置數組方法的鏈接。另外還有一個關於查找函數的提示:如果你試圖在別人的代碼中看到一個函數,在你的搜索條件中添加「mdn」(如果查找'.map()'方法,則使用「map mdn」)),而第一個谷歌結果應該是相關的MDN頁面。 – nnnnnn