从对象数组创建字符串的最简单方法

时间:2017-07-18 22:01:07

标签: javascript arrays string object lodash

注意:欢迎使用ES6,就像loash解决方案一样。

所以我有一个数组,只有每个都有key: value

的两个对象

例如:

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

我无法找到一个解决方案,它可以成为:a_1_b_2作为字符串。

您不能假设密钥或值,因此您无法执行以下操作:

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

因为键可以是任何字符串,值可以是任何数字。数组中的对象只有一个键和一个值,并且数组中只有两个对象。

考虑到这一点,我该如何创建所需的字符串?

6 个答案:

答案 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#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 :(得分: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。由于您可以准确指定要进行字符串化的数组的模式,因此您可以围绕该模型构建一个简单的函数。

&#13;
&#13;
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;
&#13;
&#13;

这不是Code Golf - 最短,最聪明,最优雅的#34;解决方案不一定总是最好用的。祝你在6个月后查看其他一些解决方案并尝试快速轻松地解读功能一目了然。