2017-08-16 55 views
1

我希望標題足以不言自明,但我會嘗試用我創建的小提琴進行說明。有兩個數組,一個叫做標籤,這是我目前擁有的和tags_ideal,這是我真正想要實現的。使用相同的對象將參數數組減少到參數

當前狀態:

var tags = [ 
    { 
    id: 1, 
    color: 'red', 
    l10n: [ 
     { 
     name: 'Something something', 
     lang: 'english' 
     }, 
     { 
     name: 'Etwas etwas', 
     lang: 'deutsch' 
     } 
    ] 
    }, 
    { 
    id: 2, 
    color: 'blue', 
    l10n: ... 
    } 
] 

什麼我後:

var tags_ideal = [ 
    { 
    id: 1, 
    color: 'red', 
    l10n: { 
     'english': { 
     name: 'Something something', 
     }, 
     'deutsch': { 
     name: 'Etwas etwas', 
     } 
    } 
    }, 
    { 
    id: 2, 
    color: 'blue', 
    l10n: ... 
    } 
] 

我第一種情況,並希望所有的東西轉換來自本地化,使他們沒有郎:英文參數,而是有一個叫做english的對象,裏面有名字/標題。這兩個標籤下面是我試圖做的事情,當我將l10n對象傳遞給它時,它的作用是什麼,但不是全部(我明白爲什麼,現在我想知道如何去做我真正想做的事情)。

另外,請注意,我的數組在這一點上是不正確的。我在下一個對象的開始處附加了三個點,以指出數組中有多個對象。

這裏的小提琴: https://jsfiddle.net/cgvpuj70/

回答

1

l10n使用.reduce()使填充了來自在當前陣列的每個對象導出的鍵/值的對象。

var tags = [ 
 
    { 
 
    id: 1, 
 
    color: 'red', 
 
    l10n: [ 
 
     { 
 
     name: 'Something something', 
 
     lang: 'english' 
 
     }, 
 
     { 
 
     name: 'Etwas etwas', 
 
     lang: 'deutsch' 
 
     } 
 
    ] 
 
    }, 
 
    { 
 
    id: 2, 
 
    color: 'blue' 
 
    } 
 
] 
 

 
tags.forEach(t => { 
 
    t.l10n = t.l10n && t.l10n.reduce((o, data) => 
 
    Object.assign(o, {[data.lang]: {name: data.name}}) 
 
    , {}) 
 
}) 
 

 
console.log(tags);

+0

太棒了!奇蹟般有效。 – twenty

+0

很高興幫助! – spanky

2

你可以遍歷外陣列並映射爲內部數組的新對象。

var tags = [{ id: 1, color: 'red', l10n: [{ name: 'Something something', lang: 'english' }, { name: 'Etwas etwas', lang: 'deutsch' }] }, { id: 2, color: 'blue', l10n: [] }]; 
 

 
tags.forEach(a => a.l10n = a.l10n.map(b => ({ [b.lang]: { name: b.name } }))); 
 

 
console.log(tags);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

雖然我得到如下相同的結果,我標誌着整個對象Spanky的答案是正確的,因爲它的工作原理不需要修改任何東西來繞過Eslinter。非常感謝! – twenty

0

所有你需要做的就是創建一個空的對象,並填滿它。首先,創建新的對象。然後,對於l10n陣列的每個元素,設置object[element.lang]等於element.name。現在你已經去了新的json結構。

這裏是一個修改translate功能:

function translate(title) { 
    var object = {}; 
    for (var i=0; i<title.length; i++) { 
    var element = title[i]; 
    object[element.lang] = element.name; 
    } 
    return object; 
} 

編輯:這裏是你如何轉化

var newTags = []; 
for (var i=0; i<tags.length; i++) { 
    var edited = {}; 
    edited.id = tags[i].id; 
    edited.color = tags[i].color; 
    edited.l10n = translate(tags[i].l10n); 
    newTags.push(edited); 
} 
+0

在我看來,這只是工作,如果我通過l10n到它,但不是整個標籤var? – twenty

+0

我將編輯答案以提供實施。 – clabe45