簡體   English   中英

如何獲取數組中的公共值

[英]How to get the common values in an array

例如,我有一個數據數組如下

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"]

只需要復制空值的公共數據被刪除。

解決此問題的最佳解決方案是什么。

您可以嘗試使用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);

您可以從一個數組創建一個集合,它會自動刪除重復項:

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

這仍然會保留空值,您可以通過delete調用將其delete ,並使用 spread ...運算符將其轉換回數組。 最終代碼將是:

let set = new Set(arrData);
set.delete(null);
let distinctArr = [...set];

如果值不為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);

將此函數添加到您的代碼中:

function removeCommonValues(arr) {
  let result = [];
  for(let i=0; i < arr.length-1; ++i) {
    if(result.includes(arr[i]) === false && 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"]
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]

您可以使用數組內置的 reducer 方法,在下一個代碼中,我從一個空數組開始,我只返回不為空且不在數組中的項目。

const data = arrData.reduce((state, value) => {
   if(value && !state.includes(value)) {
        return [...state, value];
   }

   return state;
}, [])

該函數可以在一個單獨的文件中,以便在多個頁面之間重復使用。 然后您可以調用該函數來過濾非空的不同值。

 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 && value; } console.log(arrData.filter(fn));

 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 && val !== null) { output.push(val); } }); console.log(output);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM