Массив фрагментов Javascript после значения i 1

#javascript #arrays #slice

Вопрос:

Я пытаюсь срезать массив i 1 с последнего null значения.

Массив сначала сортируется так, чтобы иметь нулевые значения.

Вот как он должен себя вести:

 [null, null, a, b, c] => [null, null, a, b]

[null, a, b, c] => [null, a, b]

[null, null] => [null, null]
 

Я делаю что-то подобное, но я не уверен, как обрабатывать массивы только с нулем.

 let newArray: = [];

for (let i = 0; i < array.length; i  ) {
  if (array[i] !== null) {
    newArray = array.slice(0, i   1);
    i  ;
  }
}
 

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

1. а как насчет других null значений, более поздних в массиве?

Ответ №1:

В вашем коде есть некоторые ошибки, которые могут привести к неожиданному поведению.

  • Поскольку у вас есть i внутренняя часть головки для петли, вам не нужно включать ее в корпус.
  • Поскольку второй параметр среза не является включающим, в зависимости от ваших условий тестирования вы действительно хотите срезать на i 2 ;

Полный код:

 function slice(array) {
    for (let i = 0; i < array.length; i  ) {
        if (array[i] !== null) return array.slice(0, i   2);
    }
    return array;
}

console.log(slice([null, null, 'a', 'b', 'c'])); // => [null, null, a, b]
console.log(slice([null, 'a', 'b', 'c'])); // => [null, a, b]
console.log(slice([null, null])); // => [null, null] 

Ответ №2:

Вы можете закрыть счетчик для следующих значений и отфильтровать массив.

 const
    slice = array => array.filter(
        (c => v => v === null || c amp;amp; c--)
        (2)
    );

console.log(...slice([null, null, 'a', 'b', 'c', 'd', 'e'])); // [null, null, a, b]
console.log(...slice([null, null, 'a', 'b', 'c'])); // [null, null, a, b]
console.log(...slice([null, 'a', 'b', 'c'])); // [null, a, b]
console.log(...slice([null, null])); // [null, null] 

Ответ №3:

Мне кажется, из ваших примеров следует, что вам нужно было только вырезать массив без последнего элемента массива. Вы хотите изменить первый массив с нулевыми значениями a, b и c на другой с такими же нулевыми значениями a и b.

 [null, null, a, b, c] => [null, null, a, b]
 

Тогда, если это так, почему бы просто не открыть массив.

 let arr = [null, null, a, b, c];
arr.pop();
 

arr теперь равен [null, null, a, b];

Для особого случая, в котором должны быть удалены только значения, отличные от null, и, таким образом, возвращен тот же массив, если он содержит все значения null, вы можете просто открыть, проверить и, если значение null, снова вернуть исходный массив.

 let arr = [null, null, a, b, c];
if(arr.pop() === null) arr.push(null);
 

И это все!

Пожалуйста, поясните, что вы подразумеваете под i 1. Похоже, вы хотите нарезать новый массив со всеми нулями и одним элементом после него. Но я не могу ответить на это, потому что не уверен.

Ответ №4:

чтобы удалить нуль в массиве, вы можете попробовать

      var arr = [null, null, a, b, c];
     var temp = arr.filter(i=>i?true:false);
     arr = temp;