Как удалить элемент из массива, если значение равно 0 в многомерном массиве, используя javascript, но сохраняя первое появление массива со значением 0

ОБНОВЛЕНИЕ: (Из комментариев я узнал, что у спрашивающего есть дополнительные требования, а не только удаление массива со значением 0):

Я хочу удалить элементы из массива, имеющие значение 0, но сохранив первое вхождение массива с нулевым значением.

   var results = [

 ["Total", "Date"],
 ["2020-12-08T00:00:00.000Z", 6],
 ["2020-12-07T00:00:00.000Z", 0],
 ["2020-12-08T00:00:00.000Z", 156],
 ["2020-12-09T00:00:00.000Z", 0],
 ["2020-12-11T00:00:00.000Z", 0],
 ["2020-12-08T00:00:00.000Z", 34],
 ["2020-12-13T00:00:00.000Z", 0]];
 for (var i =0; i < results.length; i++) {
        if (results[i][1] == 0) 
            results.splice(i, 1);
        
    }
console.info(results);

Я не уверен, что сращивание сработает в этой ситуации. Длина моего массива может уменьшаться или увеличиваться, поскольку данные поступают динамически.

В приведенном выше сценарии мой вывод должен быть:

[["Total", "Date"], ["2020-12-08T00:00:00.000Z", 6], ["2020-12-07T00:00:00.000Z", 0], ["2020-12-08T00:00:00.000Z", 156], ["2020-12-08T00:00:00.000Z", 34]]

Где мне нужно только сохранить первое вхождение массива со значением 0 ( ["2020-12-07T00:00:00.000Z", 0]) и сохранить все остальные подмассивы без значения 0.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
118
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы можете использовать фильтр

var results = [["Total", "Date"],
["2020-12-08T00:00:00.000Z", 6],
 ["2020-12-07T00:00:00.000Z", 0],
["2020-12-08T00:00:00.000Z", 156],
["2020-12-09T00:00:00.000Z", 0],
["2020-12-11T00:00:00.000Z", 0],
["2020-12-13T00:00:00.000Z", 0]];

console.info(
results.filter((a,i)=>(a[1] !== 0) || (results.findIndex(b=>b[1]==0)==i))
);

Я думал о своем ответе, и пришел ваш. Довольно мило. Оценил ваш ответ. Продолжайте кодировать. Удачного кодирования :)

Imran Rafiq Rather 13.12.2020 18:08

Спасибо. не в состоянии принять ваш ответ прямо сейчас. примет его через какое-то время

Gaurav Singla 13.12.2020 18:08

@ImranRafiqRather можно игнорировать самый первый элемент со значением 0 по любому индексу

Gaurav Singla 13.12.2020 18:12

Вы имеете в виду, что если этот массив имеет любой индекс ["Всего", "Дата"] не только 0, мы также хотим его удалить. Верно?

Imran Rafiq Rather 13.12.2020 18:14

Вам нужны только результаты var = [["2020-12-08T00:00:00.000Z", 156]]; как ваш выход?

Imran Rafiq Rather 13.12.2020 18:15

Нет. в приведенном выше случае мне нужно [["Итого", "Дата"], ["2020-12-07T00:00:00.000Z", 0], ["2020-12-08T00:00:00.000Z", 156 ],

Gaurav Singla 13.12.2020 18:16

Уважаемый @GauravSingla, ваш второй массив содержит 0 в индексе 1. Предоставленный ответ здесь не будет работать. Думаю, вам нужно будет обновить свой вопрос. Хотелось бы знать, как вы решаете, какой из них показывать из массива со значением 0 в первом индексе. Я имею в виду, как вы решаете это. ["2020-12-07T00:00:00.000Z", 0] также следует добавить :) То, как написан вопрос, никогда не говорит об этом. Это говорит только о том, что те, у кого нет второго значения, равны 0.

Imran Rafiq Rather 13.12.2020 18:23

@ImranRafiqRather я хочу игнорировать первый нуль в любом индексе, а остальные удалить все элементы с нулем .. Ноль может в любом индексе

Gaurav Singla 13.12.2020 18:25

Вы имеете в виду показать первый с нулем в массиве, и если ноль идет после этого, удалите их. Круто ... позвольте мне сделать это для вас, дайте мне минутку Но вы должны обновить свой вопрос, дорогой @GauravSingla. вы можете написать требуемый вывод. [["Всего", "Дата"], ["2020-12-07T00:00:00.000Z", 0], ["2020-12-08T00:00:00.000Z", 156],

Imran Rafiq Rather 13.12.2020 18:28

@GauravSingla: я нашел более динамичное решение вашей проблемы.

Imran Rafiq Rather 13.12.2020 18:55

Однако вы должны упомянуть об изменении своего вопроса. И добавьте эту строку в конец И напишите о получении первого экземпляра массива с 0 и удалении остальных из результата [["Итого", "Дата"], ["2020-12-07T00:00:00.000Z", 0], ["2020-12-08T00:00:00.000Z", 156],

Imran Rafiq Rather 13.12.2020 18:56

Я отредактировал ваш вопрос. Пожалуйста, посмотрите и посмотрите, соответствует ли это вашим требованиям. В этом случае вам может потребоваться одобрить редактирование :)

Imran Rafiq Rather 13.12.2020 19:15

Согласно вашему вопросу и комментариям, кажется, вы ищете следующее динамическое решение. Я добавил некоторые элементы массива в массив результатов для большей ясности.

const results = [
 ["Total", "Date"],
 ["2020-12-08T00:00:00.000Z", 6],
 ["2020-12-07T00:00:00.000Z", 0],
 ["2020-12-08T00:00:00.000Z", 156],
 ["2020-12-09T00:00:00.000Z", 0],
 ["2020-12-11T00:00:00.000Z", 0],
 ["2020-12-08T00:00:00.000Z", 34],
 ["2020-12-13T00:00:00.000Z", 0]];


const firstOccurance = results.find((array,index)=>{
  return array[1]===0;
});
// console.info(firstOccurance);

const firstOccuranceIndex = results.indexOf(firstOccurance);
const array1 = results.slice(0,firstOccuranceIndex+1);
// console.info(array1);

const array2 = results.slice(firstOccuranceIndex+1);
// console.info(array2);

const updatedArray2 = array2.filter(array=>array[1]!==0);
// console.info(updatedArray2);

const finalResult =  [...array1,...updatedArray2];
console.info(finalResult);

Выход Codepen: https://codepen.io/emmeiWhite/pen/rNMjdRZ?editors=1111

Ваш ответ, похоже, ничего не выводит. Я обновил свой, так как он уже принят.

ptothep 13.12.2020 19:45

@ptothep: попробуйте в jsbin или codepen. Ты увидишь ответ, дорогая

Imran Rafiq Rather 13.12.2020 19:46

НП Наслаждайся, мой друг. В любом случае, я дал другой подход, чтобы ответить на этот вопрос, чем ваш. Так что все хорошо. Желаю вам всего наилучшего. Ваш код также точен и хорош. Я уже оценил ваши. Теперь посмотрите мой код, он тоже будет работать нормально. Если хотите, вы также можете оценить мой :) Будьте осторожны

Imran Rafiq Rather 13.12.2020 19:54

@ImranRafiqRather Спасибо за ваше решение .. проголосовал за ваш ответ :)

Gaurav Singla 14.12.2020 02:23

@ImranRafiqRather . твой код не работает

Gaurav Singla 14.12.2020 12:16

Что именно происходит :)

Imran Rafiq Rather 14.12.2020 12:37

Используйте Array.prototype.filter()

const results = [["Total", "Date"],["2020-12-08T00:00:00.000Z", 6],["2020-12-07T00:00:00.000Z", 0],["2020-12-08T00:00:00.000Z", 156],["2020-12-09T00:00:00.000Z", 0],["2020-12-11T00:00:00.000Z", 0],["2020-12-13T00:00:00.000Z", 0]];

const output = [...results.filter(item => !item.includes(0))];
console.info(output);

Другие вопросы по теме