Как мне реализовать функцию для поиска индексов неверных элементов массива? - PullRequest
1 голос
/ 17 марта 2011

У меня есть функция с именем uncompletedSteps():

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

Эта функция должна проверять completedSteps и возвращать индекс всех completedSteps элементов, которые не равны true:

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

Другими словами, если есть:

var completedSteps = [
    true,
    null,
    true
];

Тогда uncompletedSteps() должен вернуть [0, 2].

Как это должно выглядеть uncompletedSteps()? (ECMAScript5 все в порядке.)

Ответы [ 4 ]

4 голосов
/ 17 марта 2011

Использование 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;
   });
}
1 голос
/ 17 марта 2011
var count = [];
for ( var i = 0; i<completedSteps.length; i++ ) {
  if(completedSteps[i]) {
    count.push(i);
  }
}
return count;
0 голосов
/ 31 января 2014

Эта функция должна проверять completeSteps и возвращать индекс всех элементов completeSteps, которые не равны true:

Используйте следующий процесс для обратной совместимости:

  • множественные замены для вставки строки 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"
0 голосов
/ 17 марта 2011
var arr = [true, true, null, true];
arr.map(function(el, i) { 
    return el ? i : -1; 
}).filter(function(el) {
    return el != -1;
})

Возвращает:

 [0, 1, 3]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...