Сравнение элементов массива друг с другом

#javascript #arrays

#javascript #массивы

Вопрос:

У меня есть массив символов:

 var charCode = [97,98,100,101,103];
  

Я хочу перебрать этот массив и сравнить charCode[i] с charCode[i 1] so compare:

 charCode[0] with charCode[1]
charCode[1] with charCode[2]
charCode[2] with charCode[3]
charCode[3] with charCode[4]
  

Я также хочу проверить, так ли charCode[i] 1 == charCode[i 1] это, это означает, что я хочу посмотреть, больше ли следующий элемент, чем последний, на единицу. Еще одна вещь, если, например, charCode [3] не соответствует этому правилу, я хочу сохранить индекс элемента в отдельной переменной.

 function fearNotLetter(str) {
  var bool ;
  var charCode = [];
  for (var i = 0; i < str.length; i  ) {
    charCode[i] = str.charCodeAt(i);
    // charCode = [97,98,99,100,101,103]
  }
  for (var n = 0; n < charCode.length; n  ) {
    /*
    here I'm comparing every element with every other element, 
    which is obviously not what I want
    */
    for (var j = n 1; j < charCode.length; j  ) {
      if (charCode[n]   1 < charCode[j]) {
        // don't know what to do here
      }
    }
  }
  return  charCode;
}
fearNotLetter("abcdeg");
  

Комментарии:

1. вы делаете немного другую вещь в своем коде. Вы повторяете элемент n массива против остальной части массива, т.Е. (0 против 1,2,3,4,5 ….)

Ответ №1:

Вы можете использовать array.reduce и при несоответствии, вы можете поместить это значение в промежуточный массив

 function fearNotLetter(str) {
  var charCode = [];
  str.split('').reduce(function(p,c){
    var code_p = p.charCodeAt()
    var code_c = c.charCodeAt()
    if(code_c-code_p !== 1)
      charCode.push(code_p)
    return c
  })  
  return  charCode;
}

console.log(fearNotLetter('abcdeg'))  

Комментарии:

1. спасибо за ответ, но этот код возвращает [98, 101], что не то, что я хотел

2. поскольку 103 -101 = 2, это означает, что после 101 отсутствует значение (102), поэтому оно должно возвращать 101

3. Вам также не хватает 99 , поэтому даже это должно быть выделено. Верно? таким образом, ваш конечный результат станет: [98, 101]

4. итак, рассмотрим этот массив = [98,99,100,101,103] в этом отсутствует 102. поэтому я хочу получить номер индекса элемента, после которого должно идти 102. извините за путаницу

5. я получаю сообщение об ошибке: не удается прочитать свойство ‘charCodeAt’ неопределенного

Ответ №2:

Вам просто нужен обычный цикл, просто не переходите к последнему элементу, поскольку вы проверяете [i 1] :

 var charCode = [97,98,100,101,103];
// Loop from 0 to n-2.
for (var i = 0; i < charCode.length - 1; i  ) {
  if(charCode[i]  1 == charCode[i 1]) 
    console.log(charCode[i]  1   '=='   charCode[i 1]);
}  

Ответ №3:

Вот несколько модификаций. Вы запускали внутренний цикл там, где это было не нужно.

 function fearNotLetter(str) {
  var bool ; // not sure what this is for
  // you can borrow map from array instead of looping
  var charCode = Array.prototype.map.call(str, str => str.charCodeAt(0))
  // loop over the characters. I am starting at 1 so we stop when we get to the end
  // you can access the first index by subtracting 1 from ii
  for (var ii = 1; ii < charCode.length; ii  ) {
    if (charCode[ii - 1] === charCode[ii]) {
      console.log('samsies', ii - 1, char(charCode[ii]), char(charCode[ii]))
    }
    else if (charCode[ii-1]   1 === charCode[ii]) {
      console.log('increment yo', ii - 1, char(charCode[ii -1]), char(charCode[ii]))
    }
  }
  return  charCode;
}
console.log(
  fearNotLetter("abcddeg")
)
// helper function
function char(code) {
  return String.fromCharCode(code)
}  

Ответ №4:

Вы хотите получить неудачные индексы?

 function fearNotLetter(str) {
	var failedElIndexes = [];
	var j = 0;
	for(var i = 0 in str){
		if(i < (str.length-1)){
			var n = str[i];
			var m = str[  i];
			if( String.fromCharCode(n.charCodeAt()   1 ) != String.fromCharCode(m.charCodeAt() ) ) {
				console.log(i   ": "   str[i]);
				failedElIndexes[j] = i;
				j  ;
			}	
		}else{
			break;
		}

	}
	return failedElIndexes;
}

var otherStr = "abcdeg";
var myErrIndexes = fearNotLetter(otherStr);