注意:欢迎使用ES6,就像loash解决方案一样。
所以我有一个数组,只有每个都有key: value
例如:
[{a: 1}, {b: 2}]
我无法找到一个解决方案,它可以成为:a_1_b_2
作为字符串。
您不能假设密钥或值,因此您无法执行以下操作:
let obj = _.merge({}, ...arr);
return `a_${obj.a}_b_${obj.b}`;
因为键可以是任何字符串,值可以是任何数字。数组中的对象只有一个键和一个值,并且数组中只有两个对象。
考虑到这一点,我该如何创建所需的字符串?
答案 0 :(得分:1)
Object.entries()
Array.flat()
展平为单个数组(2是flattern的级别数,使用Infinity表示未知级别数)
const data = [{a: 1}, {b: 2}];
const result = data.map(Object.entries).flat(2).join('_');
console.log(result);

答案 1 :(得分:1)
这是lodash中的一个解决方案,它使用lodash#flatMapDeep
和lodash#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 :(得分:0)
我解决了这个问题:
obj.map(x => Object.keys(x) + '_' + Object.values(x)).join('_');
答案 3 :(得分:-1)
let obj = _.merge({}, ...arr);
obj.map(o => {
var key = Object.keys(o)[0];
return `${key}_${o[key]}`;
})
.reduce((a, b) => `${a}_${b}`);
答案 4 :(得分:-1)
正如其他人所说,你可以使用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);
使用模板字符串可以减少代码,从来没有想过在移动键盘上输入代码会出现这样的问题; - )
答案 5 :(得分:-2)
其他人正在使这个过于复杂和混淆的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
&#13;
这不是Code Golf - 最短,最聪明,最优雅的#34;解决方案不一定总是最好用的。祝你在6个月后查看其他一些解决方案并尝试快速轻松地解读功能一目了然。