Может кто-нибудь объяснить, пожалуйста, следующие фрагменты кода JavaScript? (НУБ)

1

Код является частью программы, которая возвращает наибольшее число в массиве. Может кто-нибудь объяснить следующее? Спасибо

  if (parseInt(nums[0]) < parseInt(nums[1])) { nums.splice(0,1); }
        else { nums.splice(1,1); }
  • 2
    Он удаляет меньшее значение ... за исключением того, что он потерпит неудачу, если вы попробуете это в массиве [4.999, 4] так как значения интерпретируются как целые числа. Так что это не очень хороший код. Он также изменяет массив, чтобы получить совокупное значение, что также не является хорошей практикой.
Теги:
arrays

2 ответа

3

Основное - это понимание того, что .splice делает MDN

Таким образом, он будет изменять свой массив путем удаления элемента в зависимости от пройденного Params

массив. splice (start [, deleteCount [, item1 [, item2 [,...]]]])

var nums = ["2", 4];

if (parseInt(nums[0]) < parseInt(nums[1])) {
   nums.splice(0,1);    // At index 0 remove 1 item
} else { 
   nums.splice(1,1);    // At index 1 remove 1 item
}

console.log( nums )     // Modified array

PS:

  • как вы заметили, код работает только для массивов длины 2; он сравнивает только 0 и 1 индекс: nums[0] nums[1]
  • Если ваш массив равен [1, 1] (одинаковые значения), ничего не произойдет.
  • Если ваш массив [1.9, 1] - [1] будет возвращен, так как вы используете parseInt
  • Хорошая привычка использовать radix с parseInt(value, radix) например parseInt(nums[0], 10)
  • 2
    @ человек нет. В случае фрагмента в вопросе описание побочного эффекта является точным и всесторонним. Нет необходимости объяснять то, чего функция здесь не делает, когда в ссылке есть отличная документация.
1

Поскольку вы написали NOOB, я думаю, что важно быть ясным.

Метод splice удаляет 0 или более элементов из массива по указанному индексу и вставляет в этот индекс 0 или более элементов.

Подпись - someArray.splice(startNdx, deleteCount[,...itemsToInsert])

В коде, который вы опубликовали, эта часть

nums.splice(0,1);

начинается с индекса 0 и удаляет 1 элемент из массива. Другими словами, если массив был [5, 6, 7] он стал бы [6, 7]

nums.splice(1,1);

Эта часть начинается с индекса 1 и удаляет 1 элемент из массива. Другими словами, если массив был [5, 6, 7] он стал [5, 7].

Части parseInt преобразуют строки в целые числа, которые предполагают, что массив содержит строки не числа (или может содержать строки). Предполагая, что массив содержит строки, то без части parseInt он будет сравнивать строки, а не числа, которые являются другим типом сравнения. Поскольку вы не показывали содержимое массива, трудно точно знать, что он пытается сделать, но, например,

"00" < "0000"  

верно, когда

parseInt("00") < parseInt("0000") 

неправда. так же

"000_bob" < "000_jill" is true

но

parseInt("000_bob") < parseInt("000_jill") 

неправда

Таким образом, код проверяет, является ли первое значение меньше второго, но оно сравнивается по целому числу, а не по строке.

Кто-то еще утверждал, что это плохой код, но это не плохой код, не зная контекста, который он использует.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню