1

これは純粋に演習ですが、次のコードが与えられます。

var someCondition = (....);
var res = [];
if (someCondition) {
   res.push("A");
}
res.push("B");
if (someCondition) {
   res.push("C")
}
return res;

リストを表現するためのより「機能的な」方法は何でしょうか?

私は次のようなものになる可能性があります(JSでは、underscorejsを減らし、基本的には折り畳みます)

_.reduce(["A", "B", "C"], function (memo, value, index) {
     if (index === 0 || index === 2) {
        if (someCondition) {
           memo.push(value);
        }
     } else {
        memo.push(value);
     }
}, []);

またはフィルターを使用して:

_.filter(["A", "B", "C"], function (value, index) {
    if (index === 0 || index === 2) {
       return someCondition;
    } else {
       return true;
    }
});

さて、これは少し醜いように聞こえます...ここで明らかな解決策がありませんか?

4

3 に答える 3

0

個人的には、配列インデックスが重要であるため、これをフィルター関数の候補として扱いません。私にとって、最初の機能的アプローチは次のようなものです。

[].concat(someCondition ? ['A'] : [],
          ['B'],
          someCondition ? ['C'] : []);

ここでの利点は、特定のインデックスからの分離と、他のアイテムをより簡単に挿入できることです。

于 2013-10-20T12:00:16.290 に答える