1

次の名前の関数がありますuncompletedSteps()

function uncompletedSteps(completedSteps) {
    // completedSteps is an array
}

この関数は、 と等しくないcompletedStepsすべての要素のインデックスを調べて返す必要があります。completedStepstrue

if (completedSteps[i] === true) {
    // add to return list
}

つまり、次の場合:

var completedSteps = [
    true,
    null,
    true
];

その後、uncompletedSteps()を返す必要があり[0, 2]ます。

これはどのように見えるべきuncompletedSteps()ですか?(ECMAScript5 は問題ありません。)

4

4 に答える 4

4

使用reduce:

function uncompletedSteps(steps){
   return steps.reduce(function(memo, entry, i) { 
      return memo.concat(entry ? i : []);
   }, [])
}

使用forEach:

function uncompletedSteps(steps){
   var uncompleted = [];
   steps.forEach(function(entry,i) { 
      if(entry) uncompleted.push(i); 
   })
   return uncompleted;
}

mapと_filter

function uncompletedSteps(steps){
   return steps.map(function(entry, i) {
      return entry ? i : null;
   }).filter(function(entry) {
      return entry != null;
   });
}
于 2011-03-16T21:35:44.420 に答える
1
var count = [];
for ( var i = 0; i<completedSteps.length; i++ ) {
  if(completedSteps[i]) {
    count.push(i);
  }
}
return count;
于 2011-03-16T21:32:28.227 に答える
0

この関数は、completedSteps を調べて、true に等しくないすべての completedSteps 要素のインデックスを返す必要があります。

下位互換性のために次のプロセスを使用します。

  • 空の文字列に変換されnullた値の文字列を挿入するための複数の置換
  • replace削除するものtrue
  • replaceインデックスを挿入するための代替コールバックを持つ別の
  • replace先頭のコンマを削除する別の
  • replaceペアになったコンマを削除する別の

例えば:

function foo(match, offset, fullstring)
  {
  foo.i = foo.i + 1 || 0;
  if (match === "true") 
    {
    return "";
    }
  else
    {
    return foo.i;
    }
  }

function uncompletedSteps(node)
  {
  return String(node).replace(/^,/ , "null,").replace(/,$/ , ",null").replace(/,,/g , ",null,").replace(/[^,]+/g, foo).replace(/^,/,"").replace(/,,/g,",")
  }

var completedSteps = [
    null,
    true,
    false,
    true,
    null,
    false,
    true,
    null
];

uncompletedSteps(completedSteps); // "0,2,4,5,7"
于 2014-01-30T20:44:38.447 に答える
0
var arr = [true, true, null, true];
arr.map(function(el, i) { 
    return el ? i : -1; 
}).filter(function(el) {
    return el != -1;
})

戻り値:

 [0, 1, 3]
于 2011-03-16T21:48:18.963 に答える