簡體   English   中英

從解析對象返回字符串和數字數組

[英]Return array of strings and numbers from parsed object

嘗試創建一個函數以從字符串,數字和布爾數組中刪除重復項,方法是將數組值作為鍵添加到對象,然后將鍵推入結果數組。 我知道我可以使用回調和“ .filer” /“ .indexOf”更快,更干凈地編寫它,但是我正在嘗試不編寫它。

const removeDuplicates = (arr) => {
  let result = [];
  let obj = {};
  for(let i = 0; i < arr.length; i++) {
    obj[arr[i]] = "";
  }
  for(key in obj) {
    if(typeof key === 'number'){
      result.push(parseInt(key));
    }else{
      result.push(key);
    }
  }
  return result;
}

const myArr = [1,2,2,"hello","hello",3,3,"goodbye","goodbye",4,4,4,true,true,5,5];
console.log(removeDuplicates(myArr));

該函數返回:

["1", "2", "3", "4", "5", "hello", "goodbye", "true"]

我期望:

[1, 2, 3, 4, 5, "hello", "goodbye", "true"];

不知道為什么我的“ parseInt”不起作用。 我懷疑這與我使用“ typeOf”有關。 或者,當我向對象添加數組值時,它們將以字符串形式保存在對象鍵中。 任何幫助表示贊賞。

const myArr = [1,2,2,"hello","hello",3,3,"goodbye","goodbye",4,4,4,true,true,5,5];
let obj = {}
const newArr = myArr.reduce((arr, item) => {
    if(!object.hasOwnProperty(item)){
        object[item] = 0;
        arr.push(item);
    }
    return arr;
}, []);

console.log(newArr) //[1, 2, "hello", 3, "goodbye", 4, true, 5];

如果訂單很重要,您可以return arr.sort()

您檢查對象的鍵,該鍵始終是字符串,檢查不起作用,但是您可以將值轉換為數字,然后轉換回字符串,然后使用鍵對其進行檢查。 如果為true ,則您有一個數值。

  const removeDuplicates = (arr) => { let result = []; let obj = {}; for (let i = 0; i < arr.length; i++) { obj[arr[i]] = ""; } for (key in obj) { if ((+key).toString() === key) { result.push(+key); } else { result.push(key); } } return result; } const myArr = [1, 2, 2, "hello", "hello", 3, 3, "goodbye", "goodbye", 4, 4, 4, true, true, 5, 5]; console.log(removeDuplicates(myArr)); 

僅出於記錄目的,您可以使用Set ,它可以提供獨特的結果。

 const array = [1, 2, 2, "hello", "hello", 3, 3, "goodbye", "goodbye", 4, 4, 4, true, true, 5, 5], unique = [...new Set(array)]; console.log(unique); // in order of appearance 

首先,這個條件if(typeof key === 'number')永遠不會被滿足,它們都是string類型。

第二,而不是寫整個塊

for(key in obj) {
    if(typeof key === 'number'){
      result.push(parseInt(key));
    }else{
      result.push(key);
    }
  }
  return result;

您可以只返回Object.keys(obj)

現在,只要您想檢查字符串與數字的位置,就可以執行(+index).toString() === index)

它可以正常工作:

  const removeDuplicates = (arr) => {
  let result = [];
  let s = new Set()
  for (key in arr)
  {
    if (!s.has(arr[key])) {
        result.push(arr[key])
        s.add(arr[key])
    }
  }
  return result;
}

您可以使用內置於對象Set JavaScript來保留任何類型的唯一值。 這是代碼的外觀。

function removeDuplicates(arr){
    let result = Array.from(new Set(arr))
    return result;
}

const arr = [1,2,2,"hello","hello",3,3,"goodbye","goodbye",4,4,4,true,true,5,5];
console.log(removeDuplicates(arr));

這將為您帶來預期的結果。 讓我知道它是否有效。 :)

const removeDuplicates = (arr) => {
        let result = [];
        let obj = {};
        for(let i = 0; i < arr.length; i++) {
            obj[arr[i]] = "";
        }
        for(key in obj) {
            if(isNaN(+key)){
                result.push(key);
            }else{
                result.push(+key);
            }

        }
        return result;
    }

    const myArr = [1,2,2,"hello","hello",3,3,"goodbye","goodbye",4,4,4,true,true,5,5];
    console.log(removeDuplicates(myArr));

typeOf“ 2”將返回字符串,而不是數字,這就是代碼無法正常工作的原因。您需要嘗試將其解析為int,然后再決定。 希望這可以幫助!!!

暫無
暫無

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

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