これは多くの単純な解決策を伴う単純な問題であり、私はどれが最良かを見つけようとしています。簡潔で読みやすい解決策が欲しいのですが。
これが問題です。オブジェクトの配列があり、いくつかのオブジェクトメンバーをパイプで区切られた文字列に結合したいと思います。このデータの例として:
[
{
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"
// }
これを行うためのよりエレガントな方法はありますか?