#javascript #node.js #arrays
#javascript #node.js #массивы
Вопрос:
Например, у меня есть массив данных, как показано ниже
var arrData = ["40-25",null,null,"40-25","50-48",null,"30-25","40-23","50-48","30-25",null,"50-48","40-45","40-45","40-45","40-50","40-50",null,null,null,null,null,"50-48"]
мне нужно перечислить те же данные, что и ниже в javascript
var arrDataSorted = ["40-25","50-48","30-25","40-23","40-45","40-50","40-50"]
необходимо удалить только общие данные, которые реплицируют также значение null.
Каково наилучшее решение для решения этой проблемы.
Комментарии:
1. Не могли бы вы, пожалуйста, определить
best
? Меньше кода или меньше времени выполнения или что-то еще?
Ответ №1:
Вы можете попробовать использовать Array.prototype.filter()
для удаления нулевых значений и Set
получения уникальных значений. Наконец, используйте Spread syntax (...)
для преобразования заданного результата в массив.
Попробуйте следующий способ:
var arrData = ["40-25",null,null,"40-25","50-48",null,"30-25","40-23","50-48","30-25",null,"50-48","40-45","40-45","40-45","40-50","40-50",null,null,null,null,null,"50-48"];
var arrDataSorted = [...new Set(arrData.filter(i => i))];
console.log(arrDataSorted);
Комментарии:
1. Я думаю, что лучше использовать
map
вместоfilter
. Фильтр используется для прохождения определенного теста, а не просто для создания нового массива2. @csandreas1, поскольку я не мог найти это легко, я думаю, вы можете добавить свой ответ….
3.просто чтобы добавить небольшое объяснение здесь.
new Set()
создает массив только из уникальных значений, а метод filter отфильтровывает только истинные элементы в массиве,null
является ложным. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…developer.mozilla.org/en-US/docs/Web/JavaScript/Reference /…
Ответ №2:
Вы можете создать набор из массива, который автоматически удалит дубликаты:
let arrData = ["40-25",null,null,"40-25","50-48",null,"30-25","40-23","50-48","30-25",null,"50-48","40-45","40-45","40-45","40-50","40-50",null,null,null,null,null,"50-48"];
let set = new Set(arrData);
Это все равно сохранит значение null, которое вы можете удалить с delete
помощью вызова и преобразовать обратно в массив с ...
помощью оператора spread . Окончательный код будет следующим:
let set = new Set(arrData);
set.delete(null);
let distinctArr = [...set];
Ответ №3:
добавьте значения в набор, если значения нет null
, и преобразуйте его в массив.
var arrData = ["40-25",null,null,"40-25","50-48",null,"30-25","40-23","50-48","30-25",null,"50-48","40-45","40-45","40-45","40-50","40-50",null,null,null,null,null,"50-48"];
var setData = new Set();
for(var data of arrData) {
if(data) {
setData.add(data);
}
}
var arrDataSorted = [...setData];
console.log(arrDataSorted);
Ответ №4:
Добавьте эту функцию в свой код:
function removeCommonValues(arr) {
let result = [];
for(let i=0; i < arr.length-1; i) {
if(result.includes(arr[i]) === false amp;amp; arr[i] !== null)
result.push(arr[i])
}
return result
}
Использование:
removeCommonValues(["40-25",null,null,"40-25","50-48",null,"30-25","40-23","50-48","30-25",null,"50-48","40-45","40-45","40-45","40-50","40-50",null,null,null,null,null,"50-48"]) // Return ["40-25", "50-48", "30-25", "40-23", "40-45", "40-50"]
Ответ №5:
var arrData = ["40-25",null,null,"40-25","50-48",null,"30-25","40-23","50-48","30-25",null,"50-48","40-45","40-45","40-45","40-50","40-50",null,null,null,null,null,"50-48"]
var set = new Set();
for ( var i = 0 ; i< arrData.length;i ) {
if(arrData[i]!==null) {
set.add(arrData[i]);
}
}
var newArr = [...set]
Ответ №6:
Вы могли бы использовать встроенный в массив метод редуктора, в следующем коде я начинаю с пустого массива, и я возвращаю только те элементы, которые не являются null и которых еще нет в массиве.
const data = arrData.reduce((state, value) => {
if(value amp;amp; !state.includes(value)) {
return [...state, value];
}
return state;
}, [])
Ответ №7:
var arrData = ["40-25",null,null,"40-25","50-48",null,"30-25","40-23","50-48","30-25",null,"50-48","40-45","40-45","40-45","40-50","40-50",null,null,null,null,null,"50-48"]
const output = [];
arrData.forEach(val => {
if(output.indexOf(val) === -1 amp;amp; val !== null) {
output.push(val);
}
});
console.log(output);
Ответ №8:
Функция может находиться в отдельном файле для повторного использования между несколькими страницами. Затем вы можете вызвать эту функцию для фильтрации различных значений, которые не являются нулевыми.
var arrData = ["40-25",null,null,"40-25","50-48",null,"30-25","40-23","50-48","30-25",null,"50-48","40-45","40-45","40-45","40-50","40-50",null,null,null,null,null,"50-48"];
function fn(value,index,self){
return self.indexOf(value) === index amp;amp; value;
}
console.log(arrData.filter(fn));