2017-07-18 69 views
2

注意: ES6歡迎,因爲是loash解決方案。從對象數組創建字符串的最簡單的方法[Javacript]

所以我有一個數組,將只有每有key: value

兩個對象例如:

[{a: 1}, {b: 2}] 

我不能想出一個解決方案,它可以成爲:a_1_b_2爲字符串。

你不能假設鍵或值,所以你不能這樣做:

let obj = _.merge({}, ...arr); 
    return `a_${obj.a}_b_${obj.b}`; 

由於關鍵的可以是任意的字符串和值可以是任何數字。數組中的對象只有一個鍵和一個值,並且數組中只有兩個對象。

考慮到這一點,我該如何創建所需的字符串?

+3

'arr.map(O => Object.keys(O).MAP(K => K + '_' + O [K])[0])。加入(」 _')'(或任何類似的變體) –

回答

1

這裏上輸入代碼,這樣的問題是在lodash的解決方案使用lodash#flatMapDeeplodash#toPairs的組合來獲得我們可以使用lodash#join加入的一組鍵和值。

var array = [{a: 1}, {b: 2}]; 
 

 
var result = _(array).flatMapDeep(_.toPairs).join('_'); 
 
    
 
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

2
  • 合併數組中的所有對象到一個單一的對象使用陣列#分配和傳播
  • 轉換屬性:密鑰耦合到陣列使用Object#entries(ES8而是由Firefox和webkits支持)
  • 壓扁到一個單一的採用擴展語法和Array#CONCAT陣列
  • 加入所有項目

const data = [{a: 1}, {b: 2}]; 
 

 
const result = [].concat(...Object.entries(Object.assign({}, ...data))).join('_'); 
 

 
console.log(result);

+0

我以某種方式認爲'Object.entries'返回一個迭代器...顯然不是。 –

+0

Map#條目返回一個迭代器。 –

+0

啊,就是那個......謝謝! –

1

我想解決這個問題,這樣做的:

obj.map(x => Object.keys(x) + '_' + Object.values(x)).join('_'); 
0
let obj = _.merge({}, ...arr); 

obj.map(o => { 
    var key = Object.keys(o)[0]; 
    return `${key}_${o[key]}`; 
}) 
.reduce((a, b) => `${a}_${b}`); 
+0

儘管此代碼可能會回答這個問題,但提供關於此代碼爲何和/或如何回答此問題的其他上下文可提高其長期價值。 –

-1

別人都在做這個過於複雜,IMO混淆。既然你可以精確地指定要被串化的數組模式,你可以圍繞它構建一個簡單的函數。

let foo = [{a: 1}, {b: 2}]; 
 

 
function stringify(arr){ 
 
    let k1 = Object.keys(arr[0])[0]; 
 
    let v1 = arr[0][k1]; 
 
    let k2 = Object.keys(arr[1])[0]; 
 
    let v2 = arr[1][k2]; 
 
    return `${k1}_${v1}_${k2}_${v2}`; 
 
} 
 

 
console.log(stringify(foo)); // a_1_b_2

這不是代碼高爾夫球場 - 最短,最聰明,最「優雅」的解決方案並不一定總是用最好的一個。祝你好運,從現在起6個月看看其他一些解決方案,並試圖快速輕鬆地破譯功能一覽無遺。

0

正如其他人聲明的那樣,您可以使用map和Object.keys來完成這項工作。

工作例如:http://jsbin.com/rofufibemu/edit?console

const arr = [{a: "foo"}, {b: 1}, {c: "bar"}]; 
const str = arr.map(item => { 
    return Object.keys(item).map(prop => { 
    return prop + "_" + item[prop]; 
    }).join("__"); 
}).join("___"); 

console.log(str); 

可以通過使用模板字符串,可以減小碼,沒想到具有移動鍵盤;-)

相關問題