这是一个简单的问题,有许多简单的解决方案,我试图找出哪个最好。我想要一个简洁易读的解决方案。
这就是问题所在。我有一个对象数组,我想将几个对象成员组合成管道分隔的字符串。作为此数据的示例:
[
{
foo: 1,
bar: 2
},
{
foo: 10,
bar: 20
}
]
我希望能够创建这样的字符串:
foo = "1|10";
bar = "2|20";
如果项目存储在单独的数组中,这就像使用 Array.join 一样简单。
这是我目前的解决方案:
var foo = "";
var bar = "";
var firstItem = obj.splice(0,1)[0];
foo = firstItem.foo.toString();
bar = firstItem.bar.toString();
obj.forEach(function (item) {
foo += "|" + item.foo.toString();
bar += "|" + item.bar.toString();
});
我还考虑了使用 Array.reduce 的以下解决方案,但仍然缺乏对此的浏览器支持。我正在使用 Prototype,不幸的是,它的 Array.reduce与原生 JS 实现完全不同。
var strings = obj.reduce(function (a, b) {
return {
a.foo.toString() + "|" + b.foo.toString(),
a.bar.toString() + "|" + b.bar.toString()
};
});
// value of strings is now:
// {
// foo: "1|10",
// bar: "2|20"
// }
有没有更优雅的方法来做到这一点?