Как получить общие значения в массиве

#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));