1

これは多くの単純な解決策を伴う単純な問題であり、私はどれが最良かを見つけようとしています。簡潔で読みやすい解決策が欲しいのですが。

これが問題です。オブジェクトの配列があり、いくつかのオブジェクトメンバーをパイプで区切られた文字列に結合したいと思います。このデータの例として:

[
    {
        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"
// }   

これを行うためのよりエレガントな方法はありますか?

4

1 に答える 1

2

あなたはこれを行うことができます:

function propsArrayJoin(arr, prop, glue) {
  var results = [];
  arr.forEach(function (item) {
    results.push(item[prop].toString());
​ });
  return results.join(glue);
}

obj = [
    {
        foo: 1,
        bar: 2
    },
    {
        foo: 10,
        bar: 20
    }
];

foo = propsArrayJoin(obj, 'foo', '|');
bar = propsArrayJoin(obj, 'bar', '|');
于 2012-09-25T13:41:41.133 に答える