0

ユーザーが選択したドロップダウン リストに基づいて、一定数のオブジェクトを作成する必要があります。今、私はこのコードを持っています。

var driversFunc = function () {

var driversCount = osagoViewModel.fields.driversCount.selectedValue();

switch (driversCount) {

    case "many":
        return [];
    case "1":
        return [new driver()];
    case "2":
        return [new driver(), new driver()];
    case "3":
        return [new driver(), new driver(), new driver()];
    case "4":
        return [new driver(), new driver(), new driver(), new driver()];
    case "5":
        return [new driver(), new driver(), new driver(), new driver(), new driver()];
    }
};

(knockout.jsを使用)

4

3 に答える 3

2

スイッチは次のものに置き換えることができる場合があります。

if (driversCount === "many") {
  return [];
} else {
  var count = parseInt(driversCount, 10);
  var l = [];
  while (count--) l.push(new driver());
  return l;
}

manyが にマップされる理由がわかりません[]

于 2012-05-05T11:42:53.960 に答える
1

コンテキストはわかりませんが、for ループを使用してコードを書き直すことができます。

var driversFunc = function () {
    var driversCount = osagoViewModel.fields.driversCount.selectedValue();
    var result = [];
    if (driversCount != "many") {
        for (var i = 0; i < (+driversCount || 0); i++) {
            result.push(new driver());
        }
    }
    return result;
};
于 2012-05-05T11:44:15.913 に答える
1

これを試して:

return Number(driversCount) 
        ? ( function add(i){ 
             return i ? add(i-1).concat(new driver) : [] 
            }(driversCount) 
           )
        : [];

または1

return Number(driversCount) 
        ? String(new Array(driversCount))
          .split(',')
          .map(function(){return new driver})
        : [];

1String(new Array([n])).split ...構文は、メソッドの適用を強制するための小さなトリックです(map動作new Array([n]).map(...)ません)。

于 2012-05-05T11:49:50.240 に答える