ОБНОВЛЕНИЕ: (Из комментариев я узнал, что у спрашивающего есть дополнительные требования, а не только удаление массива со значением 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.
Вы можете использовать фильтр
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))
);
Спасибо. не в состоянии принять ваш ответ прямо сейчас. примет его через какое-то время
@ImranRafiqRather можно игнорировать самый первый элемент со значением 0 по любому индексу
Вы имеете в виду, что если этот массив имеет любой индекс ["Всего", "Дата"] не только 0, мы также хотим его удалить. Верно?
Вам нужны только результаты var = [["2020-12-08T00:00:00.000Z", 156]]; как ваш выход?
Нет. в приведенном выше случае мне нужно [["Итого", "Дата"], ["2020-12-07T00:00:00.000Z", 0], ["2020-12-08T00:00:00.000Z", 156 ],
Уважаемый @GauravSingla, ваш второй массив содержит 0 в индексе 1. Предоставленный ответ здесь не будет работать. Думаю, вам нужно будет обновить свой вопрос. Хотелось бы знать, как вы решаете, какой из них показывать из массива со значением 0 в первом индексе. Я имею в виду, как вы решаете это. ["2020-12-07T00:00:00.000Z", 0] также следует добавить :) То, как написан вопрос, никогда не говорит об этом. Это говорит только о том, что те, у кого нет второго значения, равны 0.
@ImranRafiqRather я хочу игнорировать первый нуль в любом индексе, а остальные удалить все элементы с нулем .. Ноль может в любом индексе
Вы имеете в виду показать первый с нулем в массиве, и если ноль идет после этого, удалите их. Круто ... позвольте мне сделать это для вас, дайте мне минутку Но вы должны обновить свой вопрос, дорогой @GauravSingla. вы можете написать требуемый вывод. [["Всего", "Дата"], ["2020-12-07T00:00:00.000Z", 0], ["2020-12-08T00:00:00.000Z", 156],
@GauravSingla: я нашел более динамичное решение вашей проблемы.
Однако вы должны упомянуть об изменении своего вопроса. И добавьте эту строку в конец И напишите о получении первого экземпляра массива с 0 и удалении остальных из результата [["Итого", "Дата"], ["2020-12-07T00:00:00.000Z", 0], ["2020-12-08T00:00:00.000Z", 156],
Я отредактировал ваш вопрос. Пожалуйста, посмотрите и посмотрите, соответствует ли это вашим требованиям. В этом случае вам может потребоваться одобрить редактирование :)
Согласно вашему вопросу и комментариям, кажется, вы ищете следующее динамическое решение. Я добавил некоторые элементы массива в массив результатов для большей ясности.
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: попробуйте в jsbin или codepen. Ты увидишь ответ, дорогая
НП Наслаждайся, мой друг. В любом случае, я дал другой подход, чтобы ответить на этот вопрос, чем ваш. Так что все хорошо. Желаю вам всего наилучшего. Ваш код также точен и хорош. Я уже оценил ваши. Теперь посмотрите мой код, он тоже будет работать нормально. Если хотите, вы также можете оценить мой :) Будьте осторожны
@ImranRafiqRather Спасибо за ваше решение .. проголосовал за ваш ответ :)
@ImranRafiqRather . твой код не работает
Что именно происходит :)
Используйте 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);
Я думал о своем ответе, и пришел ваш. Довольно мило. Оценил ваш ответ. Продолжайте кодировать. Удачного кодирования :)