2016-08-24 41 views
0
var a = { 
    "errors":{ 
    "meters.electric":[ 
     {"smart_meter":["The smart meter field is required."],"reading":["The selected reading is invalid."]} 
    ], 
    "forename":[ 
     {"invalid_character":["Invalid character in forname.", "Blah blah."]} 
    ] 
    } 
}; 

我有一個對象從API返回,我需要提取結束值來創建單個字符串。從上面的預期輸出owuld是:使用lodash提取混合對象/數組的葉子

The smart meter field is required. The selected reading is invalid.Invalid character in forname. Blah blah. 

我知道我可以建立一系列的循環來實現這一點,但有一個lodash方式?東西沿着https://lodash.com/docs#flattenDeep

+1

你能不能給更廣泛的例子嗎?你想要它與對象中的其他屬性做什麼?你是否想要.toString並且連接原始樹中的每個屬性?或者也許只有那些是字符串? –

+0

我已經爲對象添加了幾個部分並擴展了這個句子。 Bascially,是的,我只想爲視圖的錯誤字符串,並開始第一次使用lodash .. – John

回答

1

請允許我用一些組合物來吸引你。

在連接字符串之前,您可能需要一個可從任意複雜度的對象/數組中提取值的泛型函數。這裏是你會如何使用現有的lodash積木組成這個功能:

const flattenCol = _.flow(
    _.identity, 
    _.partialRight(_.map, _.cond([ 
    [_.isArray, flattenCol], 
    [_.isPlainObject, flattenCol], 
    [_.stubTrue, _.identity], 
    ])), 
    _.flattenDeep 
); 

這將提取所有的值從結構,在這種情況下,字符串。讓我們打破這:

我發現保持這種通用的功能是超級有用的。要建立您的字符串,你可以做:

flattenCol(a).join(' '); 

或者,如果你想保持黨的成分會:

const errorString = _.flow(flattenCol, _.partialRight(_.join, ' ')); 
errorString(a); 
2

這是一個有點可笑尋找,但它的工作原理:通過治療陣列

var a = { 
    "errors":{ 
    "meters.electric":[ 
     {"smart_meter":["The smart meter field is required."],"reading":["The selected reading is invalid."]} 
    ], 
    "forename":[ 
     {"invalid_character":["Invalid character in forname.", "Blah blah."]} 
    ] 
    } 
}; 

function flattenStrings(obj) { 
    if (typeof obj != 'object') { 
    return obj.toString(); 
    } 
    return Object.keys(obj).map(function(key) { 
    return flattenStrings(obj[key]); 
    }).join(""); 
} 

console.log(flattenStrings(a)); 

注和:

var flattenStrings = _.flatMap(_.flatMap(a.errors), function (i) { 
    return _.flatMap(i); 
}); 

_.join(flattenStrings, ' ') 

Example

+0

哈生病了。我知道會有這樣的事情,謝謝! – John

1

對於比較lodash,這裏是用香草的JavaScript的方法普通對象和使用Object.keys(),數組的索引不保證以穩定的順序命中,所以它有可能在不同瀏覽器上的同一對象上運行此命令可能會以不同方式對字符串進行串聯。

你可以用一些額外的代碼解決這個問題,但在這裏並沒有看到重要的東西。

+0

確實,但是我現在試圖讓我的頭進入lodash,這是一個小的lib當壓縮,我開始認爲這將是值得的長期運行 – John

+1

是的,不是要告訴你不要使用如果你想要的話,請點一下!我個人發現看到這兩個並排,對上下文有幫助,所以我想其他人也可能。 –